Как разделить строку с 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
🇷🇺 Video del ricevimento di gala in occasione della Giornata della Russia. Roma, 12 giugno 2025.
🎉 Buona Festa della Russia!
📍Ambasciata della Federazione Russa nella Repubblica Italiana
#RussiaDay2025
🇷🇺 On 10 June 2025, the Russian Embassy in the Kingdom of Belgium and the Permanent Mission of Russia to the EU and Euratom held a state reception on the eve of Russia Day.
🤝 Heads of diplomatic missions of the CIS Member States, countries of Asia, Africa, the Middle East, and Latin America, as well as representatives of international organizations, business circles, non-governmental organizations and Russian compatriots joined Russian diplomats to mark the National Day.
#RussiaDay2025
⬆️⬆️⬆️
🇷🇺 Happy Russia Day!
June 12 is a special date for everyone who loves and cherishes our country, its rich culture, centuries-old history, and remarkable diversity. It is a day when we proudly remember our roots, traditions, and spiritual values that unite us, wherever we may be.
The Russian House in Brussels warmly congratulates you on this important holiday!
May love for our homeland, respect for its history, and a desire to create and preserve live in the hearts of us all.
Happy holiday, dear friends!
Wishing you prosperity, inspiration, and new achievements!
#ДеньРоссии#РусскийДомБрюссель#RussiaDay2025