Как разделить строку с 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
Il sottosegretario alla giustizia Andrea #Delmastro annuncia: "Ho consegnato oggi le mie irrevocabili dimissioni da sottosegretario alla giustizia. Ho sempre combattuto la criminalità, anche con risultati concreti e importanti e, pur non avendo fatto niente di scorretto, ho commesso una leggerezza a cui ho rimediato non appena ne ho avuto contezza. Me ne assumo la responsabilità, nell’interesse della Nazione, ancor prima che per l’affetto e il rispetto che nutro verso il governo e verso il Presidente del Consiglio."
@UltimoraPolitics24
La Procura di Roma ha chiesto l'assoluzione per il sottosegretario alla Giustizia Andrea #Delmastro nell'ambito del processo che lo vede accusato di rivelazione del segreto d'ufficio in relazione alla vicenda dell'anarchico Alfredo Cospito. (ANSA) @UltimoraPolitics
La Procura di Roma ha chiesto l'assoluzione per il sottosegretario alla Giustizia Andrea #Delmastro nell'ambito del processo che lo vede accusato di rivelazione del segreto d'ufficio in relazione alla vicenda dell'anarchico Alfredo Cospito. (ANSA)
@UltimoraPolitics
Giorgia #Meloni: "I magistrati ritengono che #Delmastro debba essere rinviato a giudizio, il pm invece per due volte ha chiesto di archiviare il caso. Direi di aspettare una sentenza di condanna passata in giudicato per definirlo colpevole"
@UltimoraPolitics
Andrea #Delmastro (#FdI): "Secondo voi, il giorno che sono minacciato di morte dai terroristi posso anche solo pensare di dimettermi?"
@UltimoraPolitics
❗️Il sottosegretario #Delmastro (#Fdi) con delega al Dap ammette: "Le intercettazioni su Cospito le ho passate io a Donzelli". Il documento era riservato, sotto segreto istruttorio e conteneva le conversazioni tra l’anarchico e i boss sulla battaglia contro il 41 bis.
@UltimoraPolitics
❗Andrea #Delmastro (#FdI|ECR) è stato sanzionato dal Comitato sulla Condotta dei Deputati per non aver dichiarato le quote della Bisteccheria.
@OsservatorioItaliano
#Italia
Andrea #DelMastro (#FdI|ECR): "Qualche caporale del centrodestra getta la maschera e ammette di rimpiangere il proporzionale per superare il “bipolarismo bastardo”. Rinnegare il bipolarismo, che è tratto costitutivo del Centrodestra è grave, condannare all’ingovernabilità l’Italia è peggio, soprattutto se lo si fa per il recondito sogno di governare con la sinistra. FdI difenderà il bipolarismo dal ritorno al passato vagheggiato dagli ibridi di tutti gli schieramenti"
@UltimoraPolitics
❗️ Giuseppe #Conte: "Il #M5S presenta una mozione di censura nei confronti del sottosegretario Andrea #Delmastro per chiederne la revoca immediata dall'incarico"
@UltimoraPolitics