[Python-es] duda con subprocess.Popen

tny a.porrua en gmail.com
Vie Ene 28 10:44:46 CET 2011


Además de threads y process también hay programación asíncrona.

Si lo vas a hacer con el comando, yo creo que lo mejor es usar
io_add_watch como ya te han recomendado:
www.pygtk.org/pygtk2tutorial/sec-MonitoringIO.html
De este modo el propio gestor de eventos de pygtk se encarga de llamar a
tu función cada vez que haya datos que leer en stdout

No necesitas más que definir la función, crear el subproceso, y asignar
dicha función como callback del stdout del subproceso, y el gtk.main()
se encarga de todo.


Por si no andas fino con el inglés te lo traduzco-resumo

source_id = gobject.io_add_watch(source, condition, callback)

source es el fileno del stdout subprocess
condition es gobject.IO_IN (porque quieres leer)
callback es la función que se encargará de leer cuando haya datos que
leer

la función callback sera del estido de
def input_callback(source, condition):

donde source es el fileno del stdout del subprocess
y a condition puedes ignorarle, pues en tu caso siempre sera IO_IN
OJO debes devolver True para que callback sea llamado la próxima vez que
lleguen datos a stdout.
Y no hace falta andar con seeks ni nada, puesto que stdout es un pipe,
una vez que lees los datos desaparecen.


El jue, 27-01-2011 a las 10:13 -0500, Tony Peña escribió:
> vale, ya andaba por thread a ver si me resultaba pero estube pensando
> tambien otra opcion que quizas sea otra via es que:
> 
> podria abrir el fichero antes de ejecutar el proceso y ponerle un
> seek(0)
> como posicion inicial, ejecutar con el thread el proceso, y mientras
> esta
> escribiendo el seek comience a ir parseando
> y hacer un recorrido hasta donde se vaya creando mientras se parsea
> como
> 2das cosas que debe hacer, y luego seguir recorriendo el fichero
> con el mismo seek
> eso podria resolver tambien?
> 
> vaya es algo tan sencillo como cualquiera que manda a hacer algo en
> bash y
> le mande la salida a un log y por otro lado este el tail -f mirando el
> log
> que se ve como avanza cuando sucede algo y sino se queda esperando
> hasta que
> le pasen el Ctrl C entiendes?
> 
> bueno eso mismo pero en python
> 
> saludos 



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