Как разделить строку с 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
#VideoOfTheDay
🇷🇺🇨🇳 President of the People’s Republic of China Xi Jinping and President of Russia Vladimir Putin met in Beijing, with an official welcome ceremony held ahead of the Russia-China talks.
#RussiaChina
📹#VideoOfTheDay
🇷🇺🇨🇺🤝 Foreign Minister Sergey Lavrov greets Minister of Foreign Affairs of Cuba Bruno Rodríguez Parrillaahead of bilateral talks in Moscow.
#RussiaCuba
#VideoOfTheDay
🇷🇺🇨🇳 President of the People’s Republic of China Xi Jinping and President of Russia Vladimir Putin met in Beijing, with an official welcome ceremony held ahead of the Russia-China talks.
#RussiaChina
#VideoOfTheDay
🤝 Russia's Foreign Minister Sergey Lavrov greets External Affairs Minister of India Dr Subrahmanyam Jaishankar at the Russian MFA Reception House in Moscow ahead of talks earlier today
🇷🇺🇮🇳#RussiaIndia#DruzhbaDosti
#VideoOfTheDay
🤝 Russia's Foreign Minister Sergey Lavrov greets External Affairs Minister of India Dr Subrahmanyam Jaishankar at the Russian MFA Reception House in Moscow ahead of talks earlier today
🇷🇺🇮🇳#RussiaIndia#DruzhbaDosti
🤩🤩🤩#BRICS2024
The XVI #BRICS Summit is a go!
On #Day1 President of Russia Vladimir Putin held bilaterals with President of China Xi Jinping, Prime Minister of IndiaNarendra Modi, President of South Africa Cyril Ramaphosa, President of Egypt Abdel Fattah el-Sisi and President of the New Development Bank Dilma Rousseff.
🎼 In the evening the Heads of delegation attended a concert and an informal dinner in honour of the Leaders of the #BRICS countries.
📹#VideoOfTheDay
Fresh morning energy boost from Mother Nature..💚🌱☀️🙏🏻
..Среди нас есть те,кто говорят «мне скучно.Позвольте доказать Вам обратное!Мир неповторим каждую секунду,запоминайте его разным,не упускайте его,знакомьтесь с ним каждый раз как первый!Он единственный такой в своем роде!Впитывайте в себя все его краски!Дышите им,ешьте глазами,слушайте ушами,впускайте в сердце и душу..и не отпускайте никогда!Доброе утро Мир!Доброе утро Дорогие МираПланетяне!
P.S.-отмечайте всех,кому бы Вы хотели пожелать доброго утра и природу на завтрак🕊️🤍😉
#goodmorning#sundayfunday#sundayvibes#mothernature#planetearth#heavenonearth#hooponopono#purelove#video#videooftheday#adventure#ancestors#sister#sisterhood#доброеутро#всемотличногонастроения#positivevibes#levitation#beauty#nature#travelling#petitefemme#mira#мирославакарпович#женщинамира#sun#water#air#earth#fire