Как разделить строку с 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
Smile is the only curve that sets things in straight line.
Harsh from Gujarat pens down a thought on smile...!!
Do you know what's satisfying?
When you make someone smile while they were crying.
That smile which holds fire to shine from within, But helplessness just dims their light within.
The smile that wants to burst out laughing,
But their situation insists them to shed another drop of tear.
We can just take a small initiative.
Don't show hatred towards anyone in their low
You never know, when that low might turn everything around.
If possible bring a smile on someone's face
The satisfaction you'll gain can't be expressed.
God's above seeing this, will smile too
And in your life you'll surely ace.
~Harsh
#review#smile
Smile is the only curve that sets things in straight line.
Harsh from Gujarat pens down a thought on smile...!!
Do you know what's satisfying?
When you make someone smile while they were crying.
That smile which holds fire to shine from within, But helplessness just dims their light within.
The smile that wants to burst out laughing,
But their situation insists them to shed another drop of tear.
We can just take a small initiative.
Don't show hatred towards anyone in their low
You never know, when that low might turn everything around.
If possible bring a smile on someone's face
The satisfaction you'll gain can't be expressed.
God's above seeing this, will smile too
And in your life you'll surely ace.
~Harsh
#review#smile