Me gustaría utilizar el módulo de subproceso de la siguiente manera:¿Cómo puedo obtener información 'en tiempo real' de volver de un subprocess.Popen en Python (2.5)
- crear un nuevo proceso que potencialmente lleva mucho tiempo ejecutarlo
- captura
stdout
(ostderr
, o potencialmente ambos, juntos o por separado) - datos de proceso del subproceso ya que viene en, eventos quizá disparando en cada línea recibida (en wxPython decir) o simplemente imprimirlos por ahora.
He creado procesos con Popen, pero si uso comunicar() los datos me llegan a la vez, una vez que el proceso ha finalizado.
Si creo un hilo separado que hace un bloqueo de readline()
myprocess.stdout
(usando stdout = subprocess.PIPE
) no consigo ninguna línea con este método tampoco, hasta que el proceso termina. (no importa lo que configuro como bufsize)
¿Hay alguna manera de lidiar con esto que no sea horrible, y funciona bien en múltiples plataformas?
myprocess.stdout.readline() debería funcionar. ¿Puedes mostrarnos tu código? –
Las lecturas sin búfer de popen_obj.stdout() deberían funcionar, pero si no le importa estar limitado a plataformas con soporte PTY, su aplicación podría ser adecuada para la biblioteca Pexpect. –
Esta es una gran pregunta y todavía parece no tener respuesta, al menos para el requisito de "funciona bien en múltiples plataformas". –