Как разделить строку с 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
⚡ The “world's fastest armored vehicle” with a unique set of features has been unveiled
That's what its creators at US Armor Group are calling it. The vehicle is based on the Lucid Air Sapphire and is designed to change “preconceptions about the luxury of armored cars”.
The EV received a three-motor all-wheel drive system with an output of 1234 hp. This allows the standard model to accelerate from 0 to 96 km/h in 1.89 seconds, reach a top speed of 330 km/h and have a range of up to 687 km.
US Armor Group added lightweight ballistic windows that can withstand .44 Magnum rounds, as well as lightweight composite armor that is “10 times stronger than ballistic steel but five times lighter.”
In addition to the armor, the vehicle is equipped with an “impenetrable Internet/WiFi security package” that promises to protect data from hacking attempts. The company said the model has received “advanced technology that continuously scans nearby threats during transportation, gathering intelligence from more than one million sources, including scanners from local police and fire departments.”
Customers can add more powerful armor to protect against grenades, explosive devices and high-powered rifles. Options include stun door handles, pepper spray hidden in the armrest, and hidden gun locations.
Prices start at $475,000.
@CarsNews
#LucidAir#EV
⚡Представлен «самый быстрый в мире бронированный автомобиль» с уникальным набором характеристик
Так его называют создатели из US Armor Group. Автомобиль создан на базе Lucid Air Sapphire и призван изменить «предубеждения о роскоши бронированных автомобилей».
Электромобиль получил трёхмоторную систему полного привода мощностью 1234 л.с. Это позволяет стандартной модели разгоняться от 0 до 96 км/ч за 1,89 секунды, достигать максимальной скорости 330 км/ч и иметь запас хода до 687 км.
US Armor Group добавила легкие баллистические окна, которые могут выдерживать выстрелы из .44 Magnum, а также легкую композитную броню, которая «в 10 раз прочнее баллистической стали, но в пять раз легче».
Помимо брони, автомобиль оснащён «непроницаемым пакетом безопасности Интернета/WiFi», который обещает защитить данные от попыток взлома. Компания заявила, что модель получила «передовую технологию, которая непрерывно сканирует близлежащие угрозы во время транспортировки, собирая разведданные из более чем миллиона источников, включая сканеры местной полиции и пожарных».
Клиенты могут добавить более мощную броню для защиты от гранат, взрывных устройств и мощных винтовок. В качестве опций: электрошоковые дверные ручки, спрятанный в подлокотнике перцовый баллончик и скрытые места для оружия.
Цены начинаются от $475 000.
@avtoNovosti
#LucidAir#электромобиль
🚗💨Introducing the World’s Fastest Armored Vehicle: Lucid Air💨🚗
Meet the Lucid Air Sapphire, a stunning 1250-horsepower electric car that’s not just about speed—it’s also built to protect! 🛡️✨
This beast is equipped with composite armor and bulletproof glass, capable of withstanding shots from .44 Magnum handguns (think Desert Eagle!). 🔫💥 For those seeking extra security, optional upgrades can enhance protection against grenades and automatic rifle fire.
Priced at $475,000, this armored marvel is nearly double the cost of the standard Air Sapphire. 💰💎
#LucidAir#ArmoredVehicle#ElectricCar#Luxury#SafetyFirst#Innovation#Auto