Как разделить строку с 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
🇺🇿 O'zbekiston turizmini xalqaro maydonga olib chiqish va rivojlantirishga hissa qo‘shish, yurtimizning madaniyati, urf odatlari va arxitekturasi bo‘yicha ma’lumotlar, rasm va video kontentlar hamda yurtimizdagi Siz bilmagan manzillarni Sizga ulashish maqsadida yangi “SeeYoUzbekistan” loyihasini taqdim etamiz.
✊Bizning jamoamizga qo‘shilishni va qo‘llab quvvatlashni istasangiz sahifalarimizga obuna bo‘ling va birozdan so‘ng “Mustaqillik va ezgulik” monumenti haqidagi ilk postimizni ulashamiz.
#SeeYoUzbekistan#start
@seeyouzbekistan • O’zbekistonni biz bilan kashf eting!
🇺🇿 O'zbekiston turizmini xalqaro maydonga olib chiqish va rivojlantirishga hissa qo‘shish, yurtimizning madaniyati, urf odatlari va arxitekturasi bo‘yicha ma’lumotlar, rasm va video kontentlar hamda yurtimizdagi Siz bilmagan manzillarni Sizga ulashish maqsadida yangi “SeeYoUzbekistan” loyihasini taqdim etamiz.
✊Bizning jamoamizga qo‘shilishni va qo‘llab quvvatlashni istasangiz sahifalarimizga obuna bo‘ling va birozdan so‘ng “Mustaqillik va ezgulik” monumenti haqidagi ilk postimizni ulashamiz.
#SeeYoUzbekistan#start
@seeyouzbekistan • O’zbekistonni biz bilan kashf eting!
👀Bor-yo‘g‘i 1 daqiqa vaqtingizni o‘g‘irlaymiz)
Ammo bu lahzalar sizni unutmas manzaralar sari olib boradi.
⛰Tovoqsoy sharsharasining jozibali shovqini, tog‘larning ma’yus tinchligi, yashillik bilan o‘ralgan tabiiy mo‘jizalar…
Bularning barchasi bizning kameramiz nigohida. O’zbekistondagi siz bilmagan go’zalmanzaralarga bizning videolarda guvoh bo’ling!
📺 Tez kunda, SeeYoUzbekistan YouTube kanalida...
#tovoqsoy#seeyouzbekistan
@seeyouzbekistan • O’zbekistonni biz bilan kashf eting!
👀Bor-yo‘g‘i 1 daqiqa vaqtingizni o‘g‘irlaymiz)
Ammo bu lahzalar sizni unutmas manzaralar sari olib boradi.
⛰Tovoqsoy sharsharasining jozibali shovqini, tog‘larning ma’yus tinchligi, yashillik bilan o‘ralgan tabiiy mo‘jizalar…
Bularning barchasi bizning kameramiz nigohida. O’zbekistondagi siz bilmagan go’zalmanzaralarga bizning videolarda guvoh bo’ling!
📺 Tez kunda, SeeYoUzbekistan YouTube kanalida...
#tovoqsoy#seeyouzbekistan
@seeyouzbekistan • O’zbekistonni biz bilan kashf eting!
🇺🇿 O'zbekiston turizmini xalqaro maydonga olib chiqish va rivojlantirishga hissa qo‘shish, yurtimizning madaniyati, urf odatlari va arxitekturasi bo‘yicha ma’lumotlar, rasm va video kontentlar hamda yurtimizdagi Siz bilmagan manzillarni Sizga ulashish maqsadida yangi “SeeYoUzbekistan” loyihasini taqdim etamiz.
✊Bizning jamoamizga qo‘shilishni va qo‘llab quvvatlashni istasangiz sahifalarimizga obuna bo‘ling va birozdan so‘ng “Mustaqillik va ezgulik” monumenti haqidagi ilk postimizni ulashamiz.
#SeeYoUzbekistan#start
@seeyouzbekistan • O’zbekistonni biz bilan kashf eting!
Mo‘jizaviy Samarqand — tarix va zamonaviylik uyg‘unligi.
___
Magical Samarkand — where history meets modernity.
#Samarqand#Samarkand#seeyouzbekistan
@seeyouzbekistan • O’zbekistonni biz bilan kashf eting!
🇺🇿 18-noyabr - O‘zbekiston Respublikasi Davlat bayrog‘i qabul qilingan kun!
Bugungi kun milliy g‘urur va vatanparvarlikning ramzi bo‘lgan bayrog‘imizga bo‘lgan hurmat va ehtiromni yana bir bor eslatadi.
✨ Shu ulug‘ kun munosabati bilan O‘zbekistonning betakror tabiatini namoyish etuvchi mana shu suratimiz orqali tabriklarimizni yetkazmoqchimiz. Har bir vatandoshimiz qalbida davlat bayrog‘imiz kabi mangu porloq g‘urur bo‘lsin!
“SeeYoUzbekistan” jamoasi barchaniushbu unutilmas sanani qadrlashga va yurtimizni sevishga undaydi!
#DavlatBayrogʻi#SeeyoUzbekistan#KreativPark
@seeyouzbekistan • O’zbekistonni biz bilan kashf eting!