Как разделить строку с 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
Check out this inspiring video featuring influential business leaders praising India's incredible journey to become one of the world's top economic power. From inspiring hope to executing visionary plans, India's progress is evident. Watch as CEOs of top global companies, John Chambers, Sundar Pichai, David L. Calhoun, and Andrew Jassy share their perspectives on India's growth story.
Visit Now: https://youtu.be/saJnzq9yFGM
#ModiInUSA#IndoUSRelations#PMModiUSVisit
🎥Witness the unforgettable moments when PM Modi left the US Congress in awe.
Visit Now: https://youtu.be/-CDAUDVhKp0
#ModiInUSA#IndoUSRelations#PMModiUSVisit
आज व्हाइट हाउस में शानदार स्वागत, एक प्रकार से भारत के 140 करोड़ देशवासियों और अमेरिका के 4 मिलियन भारतीय समुदायों का सम्मान है। इंडियन-अमेरिकन समुदाय के लिए व्हाइट हाउस के द्वार आज पहली बार खोले गए हैं।
#ModiInUSA#PMModiUSVisit#IndiaUSRelations
क्या आप जानते है?
माननीय प्रधानमंत्री #NarendraModi अमेरिकी कांग्रेस को दो बार संबोधित करने वाले पहले भारतीय प्रधानमंत्री होंगे।
#ModiInUSA#IndoUSRelations
#PMModiUSVisit
दुनिया के शीर्ष बिजनेस लीडर्स ने बताया कैसे प्रधानमंत्री #NarendraModi के नेतृत्व में #NewIndia विश्व की सबसे बड़ी अर्थव्यवस्था बनने की ओर तेजी से अग्रसर है।। 🇮🇳
अभी देखें: https://youtu.be/saJnzq9yFGM
#ModiInUSA#IndoUSRelations#PMModiUSVisit
Honorable Prime Minister #NarendraModi receives a grand ceremonial welcome at Joint Base Andrews, Washington DC. On a state visit to the USA, invited by President Joseph Biden and First Lady Dr Jill Biden, this marks a significant moment for India-USA ties. A warm embrace of diplomacy and friendship!
Visit Now: https://youtu.be/EhWY2Ssl2ws
#ModiInUSA#IndoUSRelations#PMModiUSVisit
Did you know?
Honorable Prime Minister #NarendraModi is the first Indian PM to
address the US Congress twice!
Here are some standout aspects of his upcoming visit to the USA.
#ModiInUSA#IndoUSRelations#PMModiUSVisit
माननीय प्रधानमंत्री #NarendraModi के प्रति दुनिया की बढ़ती दीवानगी।। 🤩
देखें कैसे विदेशों में पीएम मोदी के बढ़ते कद से भारत दुनिया भर में गौरवान्वित हो रहा है।
#ModiInFrance#ModiInUSA#PMModiUSVisit#AustraliaWelcomesModi
🌍 World’s Most Popular Global Leader! 🌟
From France's resounding Modi-Modi chants to a warm Namaste Australia, and a standing ovation at the US Congress, Honorable Prime Minister #NarendraModi influence resonates worldwide. Witness the charisma and admiration surrounding this extraordinary leader.
#ModiInFrance#ModiInUSA#PMModiUSVisit#AustraliaWelcomesModi