subprocess.popen, capturar stdout

Oswaldo Hernández listas en soft-com.es
Mar Oct 30 15:51:20 CET 2007


Hola a todos,

Estoy peleandome con subprocess.popen() para capturar la salida de un proceso conforme se va 
ejecutando y no lo consigo.

El proceso lo lanzo de la siguiente forma:
     exe = "programa.exe parametro"
     pr = subprocess.Popen(exe, stdin=None, stdout = subprocess.PIPE, stderr=subprocess.PIPE)

Para capturar la salida he probado:
     retorno=None
     while retorno is None:
         out, error = pr.communicate()
         retorno = pr.poll(50)

Esto funciona, pero communicate() espera a que termine el proceso y da toda la salida de una vez.

Tambien he probado:
     retorno=None
     while retorno is None:
         out = pr.stdout.readlines()
         error = pr.stdout.readlines()
         retorno = pr.poll(50)

Ocurre lo mismo, hasta que no termina el proceso no obtengo su salida.

He probado variantes utilizando read() en vez de realines(), pero siempre lo mismo.

Al estar sobre windows no puedo utilizar select para comprobar si hay datos antes de hacer la 
lectura sobre el pipe, y me da que es ahi donde esta el problema.

¿Estoy haciendo algo mal?

-- 
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es