subprocess.popen, capturar stdout :)

tny a.porrua en gmail.com
Vie Nov 2 16:16:39 CET 2007


El vie, 02-11-2007 a las 15:11 +0100, Oswaldo Hernández escribió:
> Arnau Sanchez escribió:
> > Oswaldo Hernández escribió:
> > 
> >> Ademas, hay otro problema añadido, tengo que capturar stdout y stderr 
> >> simultáneamente, los mensajes pueden venir en cualquier momento por 
> >> cualquiera de los dos canales. Como readline() es bloqueante, si 
> >> espero por stdin, no capturo los mensajes de stderr y a la inversa. 
> >> Probe utilizando read y os.read pero no me funcionaban bien (o no supe 
> >> hacerlos funcionar).
> > 
> > Por si acaso te sirve:
> > 
> > subprocess.Popen(..., stderr=subprocess.STDOUT, ...)
> > 
> >> Tomando la idea de utilizar un programa auxiliar he creado un 
> >> programita en C para hacer esta funcion. 
> > 
> > ¡Pero eso mismo que has hecho en C se debería poder hacer en Python!
> > Si dices que pipes no se bloquea el programa, ya tienes la solución, 
> > impleméntalo con pipes también en Python (os.pipe).
> 
> Creeme que lo he intentado, el problema que he tenido ha sido con readline(),
> line = stdin.readline()
> queda esperando indefinidamente hasta que entre una linea por stdin, mientras tando pueden estar 
> llegando mensajes por stderr que no son capturados. He intentado utilizad read, pero no lo he 
> conseguido.
> 	

¿Con hilos? 
un hilo para stdin y otro para stderr que lancen eventos cuando reciben
datos, y el hilo principal con un loop a la espera dichos eventos.

------------ próxima parte ------------
_______________________________________________
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