Quando si utilizza os.system() è spesso necessario sfuggire a nomi di file e altri argomenti passati come parametri ai comandi. Come posso farlo? Preferibilmente qualcosa che funzioni su più sistemi operativi/shell ma in particolare per bash.
Sto facendo quanto segue, ma sono sicuro che ci deve essere una funzione di libreria per questo, o almeno un'opzione più elegante/robusta/efficiente:
def sh_escape(s): return s.replace("(";"(").replace(")";")").replace(" ";" ") os.system("cat %s | grep qualcosa | ordina > %s" % (sh_escape(in_filename), sh_escape(out_filename)))
Modifica: ho accettato la semplice risposta di usando le virgolette, non so perché non ci ho pensato; immagino perché provengo da Windows dove " e " si comportano in modo leggermente diverso.
Per quanto riguarda la sicurezza, capisco la preoccupazione, ma, in in questo caso, sono interessato a una soluzione rapida e semplice fornita da os.system() e l'origine delle stringhe non è generata dall'utente o non è l est inserito da un utente fidato (io).