2011-12-20 5 views
5

Io uso il seguente comando in bash per eseguire uno script Python.Chiamata di sottoprocesso Python con argomenti con più citazioni

python myfile.py -c "'USA'" -g "'CA'" -0 "'2011-10-13'" -1 "'2011-10-27'" 

Sto scrivendo uno script Python per avvolgere questo. Al momento sto utilizzando os.system (lo so, è schifoso) dal momento che non riesco a capire come ottenere le virgolette per lavorare con subprocess.Popen. Le virgolette interne singole devono essere mantenute nelle variabili stringa passate.

Qualcuno può aiutarmi a determinare come formattare la prima variabile passata al sottoprocesso.Popen.

risposta

4

Si dovrebbe essere in grado di lanciare lo script con subprocess.Popen anche con i parametri citati:

subprocess.Popen([ 
    "/usr/bin/python", 
    "myfile.py", 
    "-c", 
    "'USA'", 
    "-g", 
    "'CA'", 
    "-0", 
    "'2011-10-13'", 
    "-1", 
    "'2011-10-27'", 
]) 
0

Hai provato questo?

import subprocess 
subprocess.Popen(['python', 'myfile.py', '-c', "'USA'", '-g', "'CA'", '-0', "'2011-10-13'", -1, "'2011-10-27'"]).communicate() 

È possibile utilizzare questo in myfile.py per controllare che ciò che si ottiene dalla bash è lo stesso di quello che si ottiene da subprocess.Popen (nel mio caso i termini):

import sys 
print sys.argv 
8

Non è necessario per sfuggire ai valori. Al processo tutto è passato come una stringa.

È possibile utilizzare il modulo shlex per capire qual è il modo migliore per passare le variabili:

import shlex 
shlex.split('python myfile.py -c "USA" -g "CA" -0 "2011-10-13" -1 "2011-10-27"') 
['python', 
'myfile.py', 
'-c', 
'USA', 
'-g', 
'CA', 
'-0', 
'2011-10-13', 
'-1', 
'2011-10-27'] 
+0

Questa è l'OneWayToDoIt preferito (tm). –

+0

Si noti che questo non funziona per gli ambienti Windows in quanto shlex è pensato per le shell Unix. –