Как разделить строку с 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
🇹🇳La #Tunisie fête sept décennies de diplomatie
Depuis 70 ans, la diplomatie tunisienne s’est imposée comme un outil d’équilibre et de positionnement dans un environnement régional et international en constante mutation. Entre préservation des intérêts nationaux et recherche de partenariats multiples, Tunis a construit une approche fondée sur le respect mutuel et la non-ingérence. Le point avec Hend Abdessmad, notre correspondante au Maghreb.
RT en français • Osez questionner !
🇹🇳 Prix du carburant en #Tunisie : le gel pour la stabilité
Alors que les cours mondiaux du pétrole restent élevés, la Tunisie maintient inchangés les prix des carburants. Un choix assumé par les autorités pour protéger le pouvoir d’achat mais qui pèse de plus en plus lourd sur les finances publiques et relance le débat sur la soutenabilité du modèle de subvention. Les détails avec Hend Abdessmad, notre correspondante au Maghreb.
RT en français • Osez questionner !
⚡️À des milliers de kilomètres de la #Russie, la communauté russe en #Tunisie commémore la victoire de 1945, entre attachement aux racines et transmission d’un récit historique fondateur. Reportage de Hend Abdessmad depuis la ville de Hammamet.
RT en français • Osez questionner !
⚡️À des milliers de kilomètres de la #Russie, la communauté russe en #Tunisie commémore la victoire de 1945, entre attachement aux racines et transmission d’un récit historique fondateur. Reportage de Hend Abdessmad depuis la ville de Hammamet.
RT en français • Osez questionner !
💬Forum de Dakar : la Tunisie prône la stabilité en Afrique
À #Dakar, lors de la 10e édition du Forum international sur la paix et la sécurité en Afrique, la #Tunisie a réitéré son attachement historique aux principes de paix, de sécurité et de stabilité sur le continent, appelant à des actions concrètes face aux défis actuels de souveraineté, d’intégration et de développement durable. Les détails avec Hend Abdessmad, notre correspondante au Maghreb.
RT en français • Osez questionner !
⏺Stratégie numérique : un partenariat tripartite
La #Tunisie mise sur un nouveau modèle de collaboration pour accélérer sa transformation numérique : un partenariat à trois entre l’État, le secteur privé et les startups, au cœur des discussions de la Tunis Digital Summit, avec un cap fixé à l’horizon 2030. Le point avec Hend Abdessmad notre correspondante au #Maghreb.
RT en français • Osez questionner !