Как разделить строку с 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
Jesse Derry was taken to hospital as a precaution following his first-half substitution during today’s #PL game against Nottingham Forest.
Jesse is conscious, talking and undergoing precautionary checks. We wish him a speedy recovery and thank the medical staff for their swift response.
Steve Holland:
“Our last game, Bournemouth to Leeds, is a #PL record, I think, in terms of time between games.
“So the gap has been as big as you can have really. I think we felt it was important to get the whole group together again, and really focus on finishing the season well.
“I think this is the PERFECT venue for that, really.”
Steve Holland:
“I think the language we should be using as this club is to finish as CLOSE as we possibly can to the top [this season].
“I don’t know how possible that is, but that has to be the challenge always: to get as close as we possibly CAN to the top...” [MU]
Bruno Fernandes on matching Cristiano Ronaldo’s #PL POTM record:
“It’s always good company. We know when records are there, his name will always be around.
“It’s a HUGE honour and privilege to be close to him.” 🇵🇹❤️
[THREAD]
There are multiple Premier League games on Saturday, Sunday AND Monday. 🍿
Here are some stats you might see in GW35...
#PL | @CopyBetUKhttps://t.co/RnveqOETlK
RT @Squawka: [THREAD]
There's five Premier League games on a Sunday for the first time in 2023. 🍿
Here are some stats you might see… 👀
#PL | @CopyBetUKhttps://t.co/sMqfA3FUuS