Как разделить строку с 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
📍Date: Friday, 27 June 2025
🕢Time: 19:40–20:20
📌Venue: BURBON Wine Bar, 47 Sako i Vantsetti Street, Yekaterinburg
🎶An African band to perform at the Ural Music Night festival in Yekaterinburg!
The Office of the Honorary Consul of South Africa, together with the festival team, has invited 4Groove—a dynamic band formed by Nigerian students of Ural Federal University (UrFU)—to take part in this year’s program.
Come and enjoy the rhythm of Africa! 🎤🔥
The project is supported by the Presidential Fund for Cultural Initiatives, the National Project Tourism and Hospitality Industry, the Governor of the Sverdlovsk Region, and the Yekaterinburg City Administration.
Sber is the festival’s official general partner.
#UralMusicNight#4Groove#URFU#Yekaterinburg#SouthAfrica#AfricanMusic#MusicFestival
🎶An African band to perform at the Ural Music Night festival in Yekaterinburg!
The Office of the Honorary Consul of South Africa, together with the festival team, has invited 4Groove—a dynamic band formed by Nigerian students of Ural Federal University (UrFU)—to take part in this year’s program.
🎗 Last year, 4Groove performed a heartfelt charity concert for children and parents at the Children’s Oncology and Hematology Center. 📹 Watch the short videos from that performance—pure joy and energy!
📍Date: Friday, 27 June 2025
🕢Time: 19:40–20:20
📌Venue: BURBON Wine Bar, 47 Sako i Vantsetti Street, Yekaterinburg
Come and enjoy the rhythm of Africa! 🎤🔥
The project is supported by the Presidential Fund for Cultural Initiatives, the National Project Tourism and Hospitality Industry, the Governor of the Sverdlovsk Region, and the Yekaterinburg City Administration.
Sber is the festival’s official general partner.
#UralMusicNight#4Groove#URFU#Yekaterinburg#SouthAfrica#AfricanMusic#MusicFestival
📍Когда: пятница, 27 июня 2025 года
🕢Во сколько: 19:40–20:20
📌Где: Винотека БУРБОН, ул. Сакко и Ванцетти 47, Екатеринбург
🎶Африканская группа выступит на фестивале «Ночь музыки» в Екатеринбурге!
Офис Почётного консула ЮАР и организаторы фестиваля пригласили к участию 4Groove — музыкальный коллектив, созданный студентами УрФУ из Нигерии.
Приходите — будет по-настоящему жарко! 🎤🔥
Проект реализуется при поддержке Президентского фонда культурных инициатив, Национального проекта «Туризм и индустрия гостеприимства», Губернатора Свердловской области и Администрации города Екатеринбурга. Генеральный партнер фестиваля — Сбер.
#НочьМузыки#4Groove#УрФУ#Екатеринбург#ЮАР#Африка#Музыка#АфриканскаяМузыка
🎶Африканская группа выступит на фестивале «Ночь музыки» в Екатеринбурге!
Офис Почётного консула ЮАР и организаторы фестиваля пригласили к участию 4Groove — музыкальный коллектив, созданный студентами УрФУ из Нигерии.
🎗 В прошлом году 4Groove уже участвовала в фестивале, дав тёплый благотворительный концерт для детей и родителей в Центре детской онкогематологии. 📹 Посмотрите короткие видео с того выступления — настоящий заряд радости и энергии!
📍Когда: пятница, 27 июня 2025 года
🕢Во сколько: 19:40–20:20
📌Где: Винотека БУРБОН, ул. Сакко и Ванцетти, 47, Екатеринбург
Приходите — будет по-настоящему жарко! 🎤🔥
Проект реализуется при поддержке Президентского фонда культурных инициатив, Национального проекта «Туризм и индустрия гостеприимства», Губернатора Свердловской области и Администрации города Екатеринбурга. Генеральный партнер фестиваля — Сбер.
#НочьМузыки#4Groove#УрФУ#Екатеринбург#ЮАР#Африка#Музыка#АфриканскаяМузыка
🎶 An African band lit up the crowd at Ural Music Night in Yekaterinburg!
Thanks to the collaboration between the Office of the Honorary Consul of South Africa and the festival organizers, 4Groove — a vibrant band formed by Nigerian students at Ural Federal University (URFU) — was invited to perform.
📹 Check out these energetic performance videos! 🎤🔥
#UralMusicNight#4Groove#URFU#Yekaterinburg#SouthAfrica#AfricanMusic#LiveMusic#MusicUnites
🎶 Африканская группа зажгла на фестивале «Ночь музыки» в Екатеринбурге!
Благодаря сотрудничеству Офиса Почётного консула ЮАР и команды фестиваля, на одной из площадок выступил 4Groove — яркий музыкальный коллектив, созданный студентами УрФУ из Нигерии.
📹 Наслаждайтесь видео с их энергичного выступления! 🎤🔥
#НочьМузыки#4Groove#УрФУ#Екатеринбург#ЮАР#Африка#Музыка#АфриканскаяМузыка#МузыкаОбъединяет