Как разделить строку с 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
🍃Dr. Bryan Ardis - The Nicotine Lie
Nicotine belongs to a family of compounds called Alkaloids and occurs naturally in several varieties of plant – including Tomatoes, Aubergines and Potatoes – but is found at its highest levels in the Tobacco plant.
#tobacco#nicotine
AETATESOLIS
Из рубрики «Для эрудитов»
Сергей Рубинштейн не курил и полностью отказался от алкоголя, ведя аскетичный, строго сосредоточенный на работе образ жизни. Это соответствовало его пониманию психологии деятельности: сознание трактовалось им как внутреннее условие детерминизма субъекта, этической ответственности и глубокого единства с миром через рефлексивный анализ. Он прожил 70 лет и скоропостижно скончался 11 января 1960 года.
Алексей Леонтьев, напротив, курил интенсивно и постоянно, превратив сигарету в неотъемлемую часть общения, семинаров и повседневной атмосферы факультета психологии МГУ; данных о заметном потреблении алкоголя нет. Его деятельность носила преимущественно организационный, эмпирический и коллективный характер с акцентом на структуру мотивов, целей и операций, что сформировало его сознание как динамичное, практическое отражение реальности в непрерывных научных и административных процессах. Несмотря на вредную привычку, он прожил 76 лет и умер 21 января 1979 года от разрыва аорты после нескольких месяцев тяжёлой болезни.
Таким образом, различия в их деятельностях предопределили и различия их сознания: у Рубинштейна — философски углублённого, ориентированного на истину и этику, что обеспечивало ясность до конца, но сократило жизнь; у Леонтьева — деятельного, коммуникативного организатора, где даже курение органично вплеталось в ткань взаимодействия, продлевая продуктивный период.
#дляэрудитов#курение#smoking#tobacco#alcohol#табак#алкоголь#психология#psychology