Как разделить строку с 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
🚨🔒 High school in Anne Arundel County, MD on lockdown! Substitute teacher's backpack found with a handgun inside. School immediately secured, students confined to classrooms. Gun handed over to police; belonged to the substitute. Substitute apprehended. No evidence it was in possession of any student. Substitute now banned from working in the district. Kudos to students for handling the situation calmly and following staff directions. Stay informed with the latest news from Fox 5 DC. 📚🔒#SchoolLockdown#SafetyFirst
https://www.foxnews.com/us/maryland-high-school-placed-lockdown-after-handgun-found-substitute-teachers-backpack
Subscribe to @BadVolfNews
Ethio-Djibouti Railway Prioritizes Flood Preparedness at Inaugural flood control Management Meeting
March 21, 2024: The Lebu headquarters of the Ethio-Djibouti Railway took a proactive step today by hosting its first flood control management meeting. Led by CEO Dr. Abdi Zenebe, the conference focused on preparedness, prevention, mitigation, and rescue strategies in the event of flooding.
Eng. Daniel Hailemichael, Chief Technical Officer, presented clear guidelines on flood management duties and responsibilities, including pre-during-and post-flood inspection procedures. Michael Tefera, Director of Infrastructure and Maintenance, followed with a comprehensive overview of current and future flood control infrastructure, including dams, levees, and channels, along with identifying flood-prone zones.
This inaugural meeting, attended by senior management of EDR, marks a significant step towards a robust flood risk mitigation strategy.
#FloodPreparedness#SafetyFirst#EthioDjiboutiRailway
❕Пилотный проект по внедрению программы SafeStart стартовал на Актюбинском заводе ферросплавов
Система обучения направлена на повышение осведомленности о безопасности и развитие навыков предотвращения травм среди сотрудников. Программа фокусируется на осознанном подходе к безопасности и помогает избежать критических ошибок, часто приводящих к несчастным случаям на производстве.
SafeStart не просто обучение, а практическая методика, которая обучает сотрудников распознавать потенциальные угрозы и эффективно реагировать на них.
#қауіпсіздікжылы#годбезопасности#erg#safetyfirst
📱ERG Kazakhstan
🚗💨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
🚨 Important Recall Alert from BMW! 🚨
Over 720,000 BMW vehicles are being recalled due to a defect that has already caused 18 fires!🔥💔
The issue is linked to an electrical connector near the pump, which can be exposed to liquid, leading to potential short circuits and, in unfortunate circumstances, fire hazards. ⚠️
Affected models include:
- Series 2, 3, 4, and 5
- SUVs X1, X3, X4, and X5
- Sports car Z4
If you own one of these models produced between 2012 and 2018, please check with your dealer!
Stay safe on the road! 🛣️✨
#BMW#Recall#SafetyFirst#CarSafety#StayInformed#VehicleRecall#BMWCommunity#Auto🚗💨
⚠️🌍Google прислал жителям Аланьи предупреждение о возможном землетрясении🇹🇷
12 ноября в Аланье владельцы смартфонов на Android получили экстренное уведомление от Google об ожидании землетрясения магнитудой 5.6 в акватории Средиземного моря.
Оповещение сработало через систему Android Earthquake Alerts System, которая реагирует на сейсмическую активность в режиме реального времени 📡
По данным турецких СМИ:
• толчки ожидались в районе Средиземноморского разлома;
• эпицентр находился в море, на безопасном расстоянии от жилых кварталов 🌊
• информация вызвала кратковременную тревогу среди жителей и туристов;
• серьёзных повреждений и жертв не зарегистрировано🙏
Система Google вновь показала свою эффективность:
📱 смартфоны работают как мини-сейсмографы, фиксируя вибрации и передавая данные в сеть;
⏱ пользователи получают предупреждение за секунды или десятки секунд до возможного толчка — этого достаточно, чтобы выйти на открытую местность.
Местные власти напоминают:
• сохраняйте спокойствие при таких уведомлениях;
• держитесь подальше от зданий и балконов;
• соблюдайте инструкции AFAD — турецкого управления по ЧС.
Будьте внимательны, особенно в сейсмоактивных регионах.
Безопасность всегда важнее всего ❤️🩹
#Аланья#Турция#Землетрясение#GoogleAlert#Android#Сейсмика#НовостиАланьи#Средиземноморье#SafetyFirst#EarthquakeAlert#Alanya#TurkeyNews