[pyar] redireccionar stdout a un proceso python

Angel Java Lopez ajlopez2000 en gmail.com
Mie Oct 9 11:35:02 ART 2013


Acabo de probar en Windows, un programa C compilado similar, usando mingw.

Desde python, probe tanto interactivo, como python programa.py

import subprocess

a = subprocess.Popen(['a.exe'], stdout = subprocess.PIPE)
print(a.stdout.readline())
print(a.stdout.readline())
print(a.stdout.readline())


Si el programa C no tiene fflush(0), el programa python no avanza hasta que
no termine el proceso (o se llene algun buffer presumo)

Tiene el mismo comportamiento, si lo ejecuto interactivo como si lo ejecuto
desde un .py

Angel "Java" Lopez
@ajlopez




2013/10/9 Matías Iturburu <maturburu en gmail.com>

>
>
>
> El 9 de octubre de 2013 10:33, Santiago Paleka <santiagopaleka en gmail.com>escribió:
>
>
>> El 9 de octubre de 2013 10:29, Matías Iturburu <maturburu en gmail.com>escribió:
>>
>>>
>>>
>>> El 9 de octubre de 2013 09:51, Daniel Moisset <dmoisset en machinalis.com>escribió:
>>>
>>>> [voy a suponer que hablas de un sistema operativo unix-like]
>>>>
>>>> subprocess esta bien. Lo que probablemente esta pasando es que el
>>>> proceso esta buffereando internamente la salida; el programa C que diste de
>>>> ejemplo al menos usa printf, que cuando no larga la salida por una tty
>>>> bufferea en memoria (bloques de tipicamente 4KB) antes de largar a stdout.
>>>> asi que por varios segundos ese problama realmente no envia nada al
>>>> exterior, y por lo tanto ni python ni ningun otro proceso puede sacar esos
>>>> datos. Fijate que si en el shell haces ./tuprogramaenC | cat pasa lo mismo
>>>>
>>>
>>> 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.
>>>
>>>
>>>>
>>>>
>>>> No, el interprete no se bloquea, subprocess te devuelve un objeto que
>> se está ejecutando, y vos podés seguir con lo tuyo, el tema es que para
>> hacerle un read si, espera a que termine el proceso.
>>
>
> Si... me expresé mal. Me refería al intentar leer. Podés disparar el
> subproceso y olvidarte, o tratar de capturar la salida en PIPE. Pero de
> cualquier manera no tenés manera de que consumir la salida a medida que se
> produce. Pero Batista me acaba de probar equivocado, creo...
>
>
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
>
> --
> Matías Iturburu
> http://www.linkedin.com/in/tutuca | http://ltmo.com.ar
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20131009/a6b76e49/attachment.html>


More information about the pyar mailing list