[Python-es] duda con subprocess.Popen

Andrey Antoukh andsux en gmail.com
Vie Ene 28 21:03:29 CET 2011


No se si me equivoco pero me pregunto si lo que se pretende es
analizar la salida de ls -lloquesea mientras lo va listando... pues no
seria mejor crear una funcion que use os.walk y retorne un
generator... que poco a poco ira devolviendo fichero a fichero,  creo
que consigues el mismo efecto sin tener que complicarse tanto...

Disculpen si me entrometo, y haya dicho algo que no tenga que ver.

Un saludo.

El día 28 de enero de 2011 14:24, Tony Peña <emperor.cu en gmail.com> escribió:
> ok vale intentare entonces por ahi que es donde mas corto sera el viaje
> entonces cualquier cosa les comento
>
> un abrazo
>
> El 28 de enero de 2011 05:14, tny <a.porrua en gmail.com> escribió:
>>
>> 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
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>



-- 
http://twitter.com/andsux
http://www.niwi.be
****
http://www.freebsd.org/
http://www.postgresql.org/
http://www.python.org/
http://www.djangoproject.com/

"Linux is for people who hate Windows, BSD is for people who love UNIX"
"Social Engineer -> Because there is no patch for human stupidity"


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