subprocess.popen, capturar stdout :)

Oswaldo Hernández listas en soft-com.es
Vie Nov 2 14:37:31 CET 2007


Arnau Sanchez escribió:
> Oswaldo Hernández escribió:
> 
> 
> Siempre puedes usar expect (el de verdad, no el módulo), y lo llamas 
> desde tu programa python aprovechando lo que ya tenemos hecho:

Bueno, parece que ya lo le solucionado, os cuento:

Sobre el except vi que viene como parte de tcl, y no me hacia mucha gracia tener que instalarlo todo 
con la aplicación.
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).

Tomando la idea de utilizar un programa auxiliar he creado un programita en C para hacer esta 
funcion. En este programa ejecuta la aplicacion y crea dos pipes para capturar el stdout y el stderr 
de esta. Realizando lecturas no bloqueantes captura las salidas de ambos canales, a continuación las 
envia todas por stdout forzando un flush() y adiendoles un prefijo que indica si es una salida std o 
err. A partir de esto ya no hay problema de hacer la captura desde python utilizando el generador de 
realines() tal como indicabas.

Si a alguien le interesa esta utilidad, no hay problema en compartirla.

Saludos,

-- 
*****************************************
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