Un oggetto Popen
ha un metodo .wait()
esattamente definito per questo: per attendere il completamento di un determinato sottoprocesso (e, oltre a , per risintonizzare il suo stato di uscita).
Se si utilizza questo metodo, si impedisce che gli zombi di processo siano in giro troppo a lungo.
(In alternativa, è possibile utilizzare subprocess.call()
o subprocess.check_call()
per chiamate e in attesa.Se non si ha bisogno di IO con il processo, potrebbe essere sufficiente.Ma probabilmente questa non è un'opzione, perché se i due sottoprocessi sembrano si suppone per l'esecuzione in parallelo, il che essi non con (check_
) call()
.)
Se si dispone di diversi sottoprocessi per aspettare, si può fare
exit_codes = [p.wait() for p in p1, p2]
che restituisce non appena tutti i sottoprocessi hanno finito. Quindi hai una lista di codici di ritorno che puoi valutare.
utilizzare il metodo wait: 'p1.wait(); p2.wait() ' –
controlla questa domanda: http://stackoverflow.com/questions/6341358/subprocess-wait-not-waiting-for-popen-process-to-finish-when-using-threads – Calum
http: //stackoverflow.com/questions/100624/python-on-windows-how-to-wait-for-multiple-child-processes – Gjordis