Sto utilizzando uno script python per eseguire un processo utilizzando subprocess.Popen
e contemporaneamente memorizzo l'output in un file di testo e lo stampo sulla console. Questo è il mio codice:Ottenere l'output di un processo in fase di esecuzione
result = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
for line in result.stdout.readlines(): #read and store result in log file
openfile.write("%s\n" %line)
print("%s" %line)
Sopra codice funziona bene, ma ciò che fa è in primo luogo completa il processo e memorizza l'output in risultato variabile. Dopodiché, lo per il ciclo memorizza l'output e lo stampa.
Ma voglio l'output in fase di esecuzione (dato che il mio processo può richiedere ore per essere completato, non ottengo alcun output per tutte queste ore).
Quindi c'è qualche altra funzione che mi dà l'uscita dinamicamente (in fase di esecuzione), significa che non appena il processo dà la prima riga, dovrebbe essere stampato.
non ho mai provato, ma penso che si suppone di inviare il proprio Python 'file' oggetto per l'argomento' stdout' (o 'stdin', o' stderr'). Quindi devi eseguire il polling di quel file. "Subprocesso" è stato inventato per risparmiarti quel dolore, ma sembra che tu non abbia altra scelta. In bocca al lupo. –
_ "prima completa il processo e memorizza l'output nel risultato" _ - non è vero. – Eric
"prima completa il processo e memorizza l'output nel risultato" - non è vero. Bene, quando sto eseguendo il comando Popen, continua a funzionare fino al termine del processo e quindi esegue ulteriore codifica. Se funziona in qualche altro modo, non vedo l'ora di saperlo. – Niyojan