Desidero avviare un programma che richiede diversi minuti per il completamento. Durante questo periodo voglio leggere il messaggio di avanzamento del programma (che è stampato sullo stdout). Il problema è che non riesco a trovare un modo per leggere il suo output durante la sua corsa.Ottenere il messaggio di avanzamento da un sottoprocesso
L'unica funzione che ho trovato per leggere l'output di un programma è Popen.communicate()
, ma questo metodo attende fino al termine del processo. Quindi è impossibile ottenere il progresso e renderlo visibile all'utente in un modo speciale formattato.
È possibile farlo in un altro modo?
Quando eseguo il processo con subprocess.popen
con il mio script, vedo l'output del programma sullo schermo. È possibile nasconderlo? (Ubuntu 10.10, terminale normale)
Cosa succede se alcuni dati arrivano dopo aver interrotto il ciclo? – Neo
@Neo: il suo esempio si interrompe in EOF, il che significa che non potranno più arrivare altri dati. MA, per rispondere alle implicazioni della tua domanda: se non continui a leggere la pipe stdout, il buffer potrebbe riempirsi e il sottoprocesso bloccherà il tentativo di scrivere stdout. – payne
Ti aspetterebbe in p.stdout per utilizzarlo in seguito. Tuttavia, la chiamata readline si bloccherà fino a quando non verrà ricevuto un nuovo input o la pipe si chiude. Aggiunti alcuni script di esempio. – chmullig