[pyar] Leer stdout de un proceso que lanzo con subprocess.Popen sin bloquear el script

Daniel Moisset dmoisset en machinalis.com
Mie Abr 6 12:42:34 ART 2011


2011/4/6 Dario Ocles <dario.ocles en gmail.com>:
> Doy un ejemplo de juguete:
>
> uno.py
> import sys
> from time import sleep
>
> for n in range(5):
>    sys.stdout.write("termino %d\n" % n)

Acá, agrega un sys.stdout.flush()
Eso va a hacer que no se bufferee la salida

>    sleep(5)


Probando esto con tu ejemplito anduvo bien.


> Se les ocurre como hacer esto? Mi idea no es lanzar cada procesamiento
> por separado y no todo en un script... tampoco empezar a hacer cosas
> raras con Thread ni colas. Debe existir una forma de ir leyendo a
> medida que se escribe en el stdout.

El tema es que si el script esta buffereando, no esta escribiendo en
stdout (entonces no importa que es lo que hagas en el otro proceso,
nunca vas a leer datos que todavia no se escribieron)

Saludos,
    D.

> Desde ya muchas gracias.
>
> PD: Por las dudas aclaro que esto no trabaja como en el ejemplo, estoy
> trabajando con Django y lanzo el proceso desde un objeto que puedo
> consultarlo desde cualquier request, lo que quiero en cada request es
> ver lo que se escribió hasta el momento en el stdout... y ya como
> chuchería solo consultar lo que se escribió desde la ultima vez que se
> consulto, pero me da lo mismo cualquier de los dos.

Si queres hacer algo un poquito mas interactivo, fijate que en django
hay formas de devolver un file-like en una respuesta, y eso va
streameando la salida.

Ademas si tenes un objeto asi de global, ojo con la concurrencia, en
particular si lo modificas

Saludos,
   D.



More information about the pyar mailing list