Как разделить строку с 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
Каскадерский трюк показал водитель автомобиля #Range#Rover на ул. Стеценко.
По предварительным данным, водитель двигался по ул. Стеценко, в какой-то момент потерял управление над своим железным конём и вылетел на тротуар, после чего влетел в трамплин из снега и въехал в воздухе в бигборд. К счастью никто в этом ДТП не пострадал. Водитель утверждает, что ехал с разрешённой скоростью
🌎 In 2014, NASA’s Mars rover Curiosity recorded unusual low-frequency sounds on the Red Planet. These noises, called "pressure fluctuations," are caused by Martian winds interacting with the planet’s thin atmosphere and ground. Scientists detected these signals using a special instrument known as REMS, and the data helps track daily weather changes on Mars. ✨
#Mars⚡#soundspace⚡#rover
👉subscribe Interesting Planet
👉more Channels
#cplusplus#arducopter#ardupilot#arduplane#ardurover#ardusub#autopilot#auv#copter#drone#dronekit#mavlink#plane#robotics#ros#rov#rover#sub#uas#uav#ugv
ArduPilot is a powerful and open-source autopilot system that can control many types of vehicles, including drones, planes, helicopters, and even submarines. It offers features like autonomous flight modes, programmable missions, and support for various sensors and communication systems. This system is highly reliable and customizable, making it beneficial for users who need advanced control over their vehicles. It also has a strong community and extensive documentation, which helps users learn and improve their projects.
https://github.com/ArduPilot/ardupilot