Re: [Python-es] GtkTextView + popen2 -> Enviar salida de la ejecución de un comando a un TextView.

Arnau Sanchez arnau en ehas.org
Jue Oct 25 09:56:01 CEST 2007


bameda escribió:

> Estoy haciendo una interfaz GTK para una determinado COMANDO de
> terminal en linux.
> Para recibir su salida lo hago de la siguiente manera:
> 
> pipes = os.popen2(COMANDO + " \"" + filename + "\"")

A riesgo de hacerme pesado, repito lo de siempre: usa subprocess (bueno, 
bonito, barato):

http://docs.python.org/lib/module-subprocess.html

> text = ""
> for line in pipes[1].readlines():
>          text = text + line

Ese bucle no es idiomático.

http://jaynes.colorado.edu/PythonIdioms.html

Textualmente sería:

text = "".join(line for line in pipes[1].readlines()]

Aunque así no puedes leer de una pipe, la bloqueas seguro. Para empezar, 
probaría leyendo sólo una línea (siempre que sepas que hay datos a leer)

> El problema surge cuando el comando en cuestión se queda dentro de un
> bucle en su ejecución y, evidentemente, no me muestra nada por
> pantalla.
> ¿Hay alguna forma de mandar la salida directamente al TextView sin
> esperar a que el comando termine su ejecución?

Usa subprocess en combinación con gobject.io_add_watch. Ver tutorial:

http://www.pygtk.org/pygtk2tutorial-es/sec-MonitoringIO.html

Si tienes problemas, buscando en google por esas palabras claves 
encontrarás muchos programas que lo hacen, por ejemplo:

http://www.zeroflux.org/proj/pyburn/pyburn

arnau

pd: el subject es un poquito largo, sería mejor algo más sintético para 
que se vea mejor en los archivos...
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


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