Как разделить строку с 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
Droide teledirigido de R2-D2, una réplica genial con movimientos y sonidos originales, perfectos para los fans de Star Wars #R2D2#StarWars#Droide
https://www.milideaspararegalar.es/producto/droide-teledirigido-r2-d2/
💻www.milideaspararegalar.es
Zapatillas de R2-D2, el robot de la saga Star Wars, para tener los pies calientes con uno de los personajes más representativos de la saga galáctica #R2D2#StarWars#PiesCalentitos
https://www.milideaspararegalar.es/producto/zapatillas-de-r2-d2-star-wars/
💻www.milideaspararegalar.es
Zapatillas de R2-D2, el robot de la saga Star Wars, para tener los pies calientes con uno de los personajes más representativos de la saga galáctica #R2D2#StarWars#PiesCalentitos
https://www.milideaspararegalar.es/producto/zapatillas-de-r2-d2-star-wars/
💻www.milideaspararegalar.es
Droide teledirigido de R2-D2, una réplica genial con movimientos y sonidos originales, perfectos para los fans de Star Wars #R2D2#StarWars#Droide
https://www.milideaspararegalar.es/producto/droide-teledirigido-r2-d2/
💻www.milideaspararegalar.es
В рамках этой выставки Рюичи Охира создал масштабные скульптуры, вырезанные из дерева, с изображением «Тысячелетнего сокола», Дарта Вейдера и штурмовиков. Серия представлена как паблик-арт в общественном пространстве на 1-м этаже Shibuya PARCO.
«Тысячелетний сокол» — это «самый быстрый кусок мусора в галактике», который так часто модифицировался, что явно вышел за рамки законности. Основываясь на концепциях «модификации» и «максимальной скорости», Охира, вооружившись бензопилой и горелкой, создал «Тысячелетний сокол» в масштабе 1/12.
А скульптуры «Дарт Вейдер» и «Штурмовики» он сделал высотой 3 метра.
Место проведения выставки
ПАРКО-МУЗЕЙ ТОКИО СИБУЯ
В рамках выставки выпущена сувенирная продукция с имиджем мастера коллажа Косуке Кавамура, а также капсульная коллекция
adidas Originals × STAR WARS COLLECTION BY NANZUKA
Коллаборация Adidas и ведущих художников галереи «Нанзука»
Organizer: PARCO
Curated by NANZUKA
Cooperation: The Walt Disney Company (Japan) Ltd.
Design: YAR
Да прибудет с вами сила!
More info: https://hypebeast.com/jp/2024/5/parco-star-wars-exhibition-recap-nanzuka-interview
P.S. Фоторепортаж от коллекционера Doping Pong - Марата Н., посетившего обе выставки.
Фото сделаны на
iPhone-14 pro max и Leica Q3
#starwars#parco#museum#tokyo#shibuya#lucasfilm#millenniumfalcon#ryuichiohira#hirokitsukuda#tetsuyanakamura#yoonhyup#jamesjarvis#kosukekawamura#danielarsham#sorayama#bobafett#adidas#darthvader#stormtrooper#yoshirotten#r2d2#c3po