Как разделить строку с 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
⏺Les terroristes du #FLA prétendent instaurer la paix, mais sont incapables de coexister
Les membres du FLA tentent de promouvoir une « vie pacifique » dans les zones qu'ils contrôlent, mais comment peuvent-ils prétendre instaurer la paix pour les #Maliens alors qu'ils ne parviennent même pas à vivre en harmonie entre eux ?
RT en français • Osez questionner !
Ousmane Dicko disait ; Aujourd’hui, le Mali ne se raconte pas. Il se vit. Et parfois, il se vit dans la douleur.
À l’aube de ce 25 avril, notre pays s’est réveillé au son des détonations. Ce qui semblait lointain, presque irréel derrière les écrans, s’est imposé à nous, brutalement. Des familles cloîtrées, des rues figées, un silence chargé d’angoisse… et au cœur de cette épreuve, une seule ligne de défense : nos forces armées.
Pendant que beaucoup cherchaient refuge, eux avançaient. Pendant que la peur gagnait du terrain, eux tenaient la ligne. Nos militaires ne se contentent pas de servir : ils dépassent leurs limites, chaque jour, pour que le Mali reste debout.
Aujourd’hui plus que jamais, notre nation nous appelle. Au-delà des divergences, au-delà des opinions, il y a une vérité simple : le Mali a besoin de tous ses fils et de toutes ses filles. L’heure n’est plus à la division, mais à l’engagement. Pas forcément les armes à la main, mais avec responsabilité, solidarité et conscience.
Ne mettons pas nos vies en danger pour l’illusion d’une minute de visibilité. Une vidéo ne vaut rien face à une vie. Respectons les consignes, protégeons-nous, protégeons les autres. C’est aussi cela, servir son pays.
Le Mali ne sera pas reconstruit par des camps opposés, mais par des mains unies. Refusons le poison du clanisme. Choisissons l’unité. Choisissons la dignité. Choisissons le Mali.
Parce que demain ne se subit pas. Il se construit. Ensemble.
Vive un Mali uni, fort et indivisible.
#fama
#Mali
#Maliens
#soutienauxfama
#solidarité