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