Как разделить строку с 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
❗🇷🇺 Russian Defence Ministry 24-Hour hotline: +78001007707
Our 24-hour hotline provides steady communication with all structures, including embassies of foreign states and all foreign subscribers, including international organizations (UN and OSCE). All calls from anywhere in the world, including from Ukraine, will be accepted, processed and implemented in accordance with the request.
#MoD#Russia#hotline
@mod_russia_en
📰US and Russia agree to resume regular military contact
The United States and Russia have agreed to reestablish high‑level military‑to‑military dialogue for the first time in over four years, both powers announced late Thursday.
The deal was struck in Abu Dhabi, on the sidelines of trilateral talks between the U.S., Russia and Ukraine on ending the war, and was announced by U.S. European Command. The channel will
“provide a consistent military‑to‑military contact as the parties continue to work towards a lasting peace.”
High‑level military communication was suspended in the fall of 2021, shortly before Russia’s full‑scale invasion of Ukraine. Since then, there have been repeated close calls: Russian drones and warplanes edging into NATO airspace, U.S. unmanned systems operating over the Black Sea and Syria, and an almost constant risk of misunderstanding turning into escalation.
Now, the two sides say they want to avoid miscalculation and unintended escalation. The U.S. stresses that such dialogue is
“an important factor in global stability and peace, which can only be achieved through strength,”
and that it will increase transparency and help de‑escalate.
Diplomacy, or nuclear‑treaty bargaining?
The announcement came hours after the New START treaty expired, leaving the U.S. and Russia without a formal cap on their nuclear arsenals for the first time in half a century. Russia has said it still wants to talk, and the Kremlin has offered to keep observing the treaty’s limits — but only if the U.S. responds positively.
Axios reports that negotiators were closing in on a deal in Abu Dhabi to keep key provisions in place while both sides work toward a new framework, which Trump has described as a “new, improved, and modernized” treaty.
The Trump factor
President Donald Trump, who has repeatedly called for closer ties with Moscow, framed the move as a win for his approach: normalizing relations with Russia while pressing for a Ukrainian peace deal and a new arms‑control framework.
But in practice, the renewed hotline is less about friendship and more about necessity: when two nuclear powers hover over the same war zone, the only safe channel is one that stays open — even if both sides keep their fingers on the trigger.
#USRussia#Military#NewSTART#Nuclear#Ukraine#Trump2026#Diplomacy#NATO#Hotline
📱American Оbserver - Stay up to date on all important events
🇺🇸