Как разделить строку с shell-командой на отдельные аргументы в виде списка?
Если сделать просто сплит по пробелу то получим то что надо, кроме случаев со вставками текста с пробелами. Например так:
>>> '-arg "I Am Groot"'.split(' ')
['-arg', '"I', 'Am', 'Groot"']
Чтобы учитывать текст в кавычках как единый аргумент можно воспользоваться функцией shlex.split()
Кто читает мой канал давно, уже в курсе.
А что делать, если нужно обратное действие? Объединить аргументы из списка в строку и при этом добавить кавычки в аргумент с пробелами.
Конечно, если вы используете subprocess то он сам всё разрулит. Но если вам нужна именно команда одной строкой, то можно воспользоваться готовой функцией в том же subprocess.
>>> from subprocess import list2cmdline
>>> list2cmdline(['-arg', 'I Am Groot'])
'-arg "I Am Groot"'
Он также позаботится об экранировании уже имеющихся кавычек
>>> list2cmdline(['-arg', 'I Am "Groot"'])
'-arg "I Am \"Groot\""'
А вот так он может "схлопнуть" в команду JSON
>>> list2cmdline(['--json', json.dumps({'key': 'value'})])
'--json "{\"key\": \"value\"}"'
_______________
Возможно кто-то спросит, а зачем соединять аргументы в строку если subprocess сам это сделает а os.system не наш путь?
Мне как-то потребовалось отправлять команду на удалённое выполнение и в API поддерживалось указание команды только строкой. Так что всякое бывает)
#libs#basic
🌪 SODA Жидкий хайлайтер #showyourself "North Wind"
Всем хайлайтерам хайлайтер! Блеск, напоминающий то ли далекие галактики, то ли зимнюю магию из “Холодного Сердца”❄️
За что любим больше всего: яркость сияния! 🌌 От нежного мерцания свечи до тысячи звезд — все зависит от того, сколько его нанесешь ✨
🌟 Идеальный подарок для той самой подружки, которая обожает быть звездой вечеринки!
#sodalab#sodalovesdisney
Второе окошко! 👀
SODA Палетка теней Into the Unknown #showyourself🧊
Абсолютная база для зимы: 15 глубоких, насыщенных оттенков с различными финишами — от серебристого шиммера до матового бургунди⚡️
☝️ За что любим больше всего: универсальность!
Хочешь легкий искрящийся макияж? Будет! Хочешь драмы в образе? Весь мир у твоих ног!
Идеальный подарок для тех, кто хочет холодную палетку с по-настоящему зимним настроением 😌
P.S. Если будешь пересматривать «Холодное сердце 2» – найдёшь все отсылки в названиях оттенков 👀❄️
#sodalab#sodalovesdisney
Открываем первое окошко! 👀
❄️ Глиттер гель для лица и тела #showyourself "Fifth Element"
Это не просто блестки, это крупный глиттер в форме снежинок и сердечек💕
Он может быть той самой “вишенкой на торте” твоего зимнего макияжа, а может стать главной звездой всего образа
💎
За что любим больше всего: сразу поднимает градус праздника в любом образе, а благодаря своей клейкой гелевой основе стойко держится весь день — приятно, когда твой любимый глиттер остается на лице (или ключицах!), а не размазывается через полчаса по всей одежде 👀
✨ Вдохновлен и назван в честь пятого духа в Холодном Сердце 2, Эльзы – моста между мирами людей и духов ✨
Идеальный подарок для тех, кто обожает зимнюю эстетику и ее атрибуты 🎁
#sodalab#sodalovesdisney
🌼 SODA Жидкая подводка для глаз с блестками #guyliner
Культовая классика! Актуальна всегда, потому что приносит с собой праздник и хорошее настроение🥳
За что любим больше всего: блестки, разнообразие цветов… но особенно за то, что она подойдет тем, кто не умеет делать стрелки 😼 Ровные линии не заставят себя ждать!
Идеальный подарок для тех, кто любит блеск вечеринки, но не хочет тратить на создание праздничного образа слишком много времени ⏰
#sodalab#sodalovesdisney