Как разделить строку с 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
🔴#EnDirect : Programme annuel « Bilan de l’année avec Vladimir Poutine ».
Au cours de l’événement, le Chef de l’État dressera le bilan de l’année écoulée et répondra aux questions des journalistes et des citoyens du pays. Les réussites majeures et les défis auxquels la Russie est confrontée seront abordés.
🔴Ruptly
🔴Kremlin.News (en anglais)
🔴#EnDirect : Session spéciale de discussion « Vérification responsable des faits à l’ère de la post-vérité : nouvelles opportunités de coopération » dans le cadre du Global Digital Forum, avec la participation du Département de l'information et de la presse du Ministère russe des Affaires étrangères. Parmi les intervenants : la porte-parole la diplomatie russe, Maria Zakharova
🔴Ruptly
🔴Global Digital Forum
🔴#EnDirect : Discours de Sergueï Lavrov, Ministre des Affaires étrangères de la Fédération de Russie, lors de la XIIIe Réunion internationale des Hauts Représentants chargés des questions de sécurité
🔴Ruptly
🔴Site web du MAE russe
🔴#EnDirect : Allocution de Sergueï Lavrov, Ministre des Affaires étrangères de la Fédération de Russie, lors de la réception à l’occasion de la Journée de l’Afrique
🔴Site web du MAE russe
🔴#EnDirect : Conférence de presse de Sergueï Lavrov et des participants à la réunion Russie – Alliance des États du Sahel au niveau des ministres des Affaires étrangères
🔴Ruptly
🔴Site web du MAE russe
🔴#EnDirect : Soirée de gala dédiée à la Journée de la langue russe au siège de l’#UNESCO
⚡️ Invité spécial — Igor Butman et son quartet
🔴Site officiel de l’UNESCO (en anglais)
🔴YouTube (en anglais)
🔴#EnDirect : Discours de Vice-ministre des Affaires étrangères de la Fédération de Russie, Alexandre Pankine, lors de la session de discussion du Forum économique international de Saint-Pétersbourg 2025« L’ordre international de Yalta et de Potsdam : leçons du passé ou mémoire du futur ? »
📌 Saint-Pétersbourg, 18 juin
🔴Ruptly (en anglais)
🔴Site web du SPIEF (en anglais)
***
🔴#EnDirect : Discours de Vice-ministre des Affaires étrangères de la Fédération de Russie, SergueïRyabkov, lors de la session de discussion du Forum économique international de Saint-Pétersbourg 2025 « Russie-Brésil »
📌 Saint-Pétersbourg, 18 juin
🔴 Site web du SPIEF (en anglais)
#SPIEF2025
🔴#EnDirect : Regardez la finale du concours international de musique #Intervision
Suivez les liens ci-dessous 👇
🔗https://www.youtube.com/live/Na-JJ_QK624?si=-8EA58skO-o7DhoE
🔗https://www.1tv.ru/shows/intervidenie
🔗https://vkvideo.ru/video-220754053_456243806
#Intervision2025