[pyar] redireccionar stdout a un proceso python

Santiago Paleka santiagopaleka en gmail.com
Mie Oct 9 11:21:03 ART 2013


El 9 de octubre de 2013 11:06, Facundo Batista
<facundobatista en gmail.com>escribió:

> 2013/10/9 Facundo Batista <facundobatista en gmail.com>:
>
> >> Pero de cualquier manera va a bloquear el intérprete hasta que la
> ejecución
> >> del subproceso se complete, no?
> >> No hay una manera de leer la salida del subproceso a medida que se va
> >> produciendo, asincrónicamente.
> >
> > Sí, porque vos tenés abierto el stdout del otro proceso como un file
> > handler. O sea, hacés read() de lo que querés. El truco es hacer
> > read(N), donde N es una cantidad de bytes, no todo, así que te va a
> > traer parte de eso si es que hay...
>
> Para este código en C:
>
> """
> #include "stdio.h"
> void main(void)
> {
>     int i;
>     for(i=0;i<20;i++)
>     {
>         printf("salida %d\r\n",i);
>         fflush(0);
>         sleep(1);
>     }
> }
> """
>
> (notar el fflush)
>
> Esto es lo que digo:
>
> >>> pipe = Popen(["./froo.o"], stdout=PIPE)
> >>> pipe.stdout.read(4)
> 'sali'
> >>> pipe.stdout.read(4)
> 'da 0'
> >>> pipe.stdout.read(4)
> '\r\nsa'
> >>> pipe.stdout.read(4)
> 'lida'
> >>> pipe.stdout.read(4)
>
> (acá no se vé, pero hay esos reads los tiré enseguida, antes que termine)
>
> Slds.
>
>
Facundo,

Si lo hago desde la consola python, como me parece que estás haciendo vos,
funciona, ahora desde ipython (que es donde estaba probando) y escribiendo
el programa y ejecutándolo con python, se queda esperando que termine.
probá haciendoló en un .py y correlo, a ver si te hace lo mismo.
yo hice:

from subprocess import Popen, PIPE
pipe = Popen(["./prints"],stdout=PIPE)
while 1:
    print pipe.stdout.read(4)

Lo ejecuto y nada,
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20131009/d4e0572b/attachment-0001.html>


More information about the pyar mailing list