2012-01-27 7 views
11

Desidero essere in grado di definire una variabile in base al valore restituito di uno script. Questo è quello che ho attualmente:Ottenere un valore di ritorno utilizzando il sottoprocesso

sum_total_earnings_usd = subprocess.call([SCRIPT, "-d", date]) 

Ho controllato il valore di ritorno di SCRIPT, tuttavia, quando cerco di impostare questa variabile, restituisce sempre 0 (http://docs.python.org/library/subprocess.html#subprocess.call). Come potrei eseguire questo script e catturare il valore di ritorno da memorizzare come variabile?

risposta

19

Uso subprocess.check_output() invece di subprocess.call()

+0

Grazie. 'subprocess.check_output()' è quello che esegue il comando e restituisce il valore restituito. – David542

+0

Se vuoi che l'output scriva il tuo valore su STDOUT e usi 'check_output()' per ottenere il valore. In caso contrario, jcollado è corretto che lo stato di uscita del processo è già stato restituito. –

3

subprocess.call torna già il valore di ritorno di processo. Se ricevi sempre lo 0, dovrai verificare SCRIPT per assicurarti che restituisca il valore che ti aspetti.

Per ricontrollare, è anche possibile eseguire SCRIPT in una shell e utilizzare $? per ottenere il codice di ritorno.

6

Se il lo script sta tornando il valore, allora si desidera utilizzare subprocess.check_output():

subprocess.check_output([SCRIPT, "-d", date], shell=True). 

subprocess.check_call() ottiene il valore di ritorno finale dallo script, e 0 significa generalmente "la sceneggiatura completata con successo".