2009-05-28 17 views
7

Sto provando a scrivere un programma in Python e mi viene detto di eseguire un file .exe. Quando viene eseguito questo file .exe, sputa un sacco di dati e ho bisogno di stampare una determinata riga sullo schermo. Sono abbastanza sicuro di aver bisogno di usare subprocess.popen o qualcosa di simile ma sono nuovo nel sottoprocesso e non ne ho idea. Qualcuno ha un modo semplice per farmi finire?!? Grazie!!Come posso acquisire l'output stdout di un processo figlio?

risposta

17

Qualcosa di simile a questo:

import subprocess 
process = subprocess.Popen(["yourcommand"], stdout=subprocess.PIPE) 
result = process.communicate()[0] 
+0

Come potrei leggere una certa linea fuori? è quello dove lo 0 è? E sì, mi interessa stampare l'output al termine del processo. Anche dove hai "yourcommand" l'estensione exe va lì? – Tyler

+1

"risultato" sarà l'intero risultato di "tuo comando". È quindi possibile elaborare quella stringa (o oggetto byte, in Py3.0) per trovare la linea che stai cercando. –

+3

il [0] indica il primo elemento della tupla restituita (stdout, stderr); puoi elaborare il risultato, che sarà una stringa, a tuo piacimento, ad es. per trovare una linea particolare. "yourcommand" è il comando completo, eventualmente un percorso completo per un comando se il comando ist non è * sul percorso * (almeno su * nix). – miku

23

@ soluzione di Paolo è perfetto se siete interessati a stampa di uscita dopo che il processo è terminato l'esecuzione. Nel caso in cui si desidera eseguire il polling di uscita mentre il processo è in esecuzione quello che dovete fare in questo modo:

process = subprocess.Popen(cmd, stdout=subprocess.PIPE) 

while True: 
    out = process.stdout.readline(1) 
    if out == '' and process.poll() != None: 
     break 
    if out.startswith('myline'): 
     sys.stdout.write(out) 
     sys.stdout.flush() 
Problemi correlati