[Python-es] ¿cómo ver el stdout en tiempo real?

Jose Caballero jcaballero.hep en gmail.com
Mar Oct 26 01:09:04 CEST 2010


El 25 de octubre de 2010 18:38, Arnau Sanchez <pyarnau en gmail.com> escribió:

> On Mon, 25 Oct 2010 17:58:34 -0400 Jose Caballero wrote:
>
> > Sí, estoy intentándolo con subprocess. Capturar el output y el RC lo
> > consigo. De hecho eso ya lo tenía con popen2. Ver la salida "en directo"
> es
> > lo que me está dando más problemas...
>
> popen = subprocess.Popen(command, stdout=subprocess.PIPE)
> for line in iter(popen.stdout.readline, ""):
>    print line,
>


Nope. Me imprime todo el output al final, no a medida que se va generando.
Por ejemplo, imaginemos que el command es "./cmd.py"
donde cmd.py es algo como esto (esto es un ejemplo tonto para probar)

---------------------------------------------------
#!/usr/bin/env python

import time
for i in range(3):
        print time.time()
        time.sleep(3)
---------------------------------------------------

Si intento ejecutarlo desde un programa main.py que es algo como esto:

---------------------------------------------------
#!/usr/bin/env python

import subprocess

popen = subprocess.Popen('./cmd.py', stdout=subprocess.PIPE)
for line in iter(popen.stdout.readline, ""):
   print line,
---------------------------------------------------

Los tres valores del tiempo se muestran en una sola vez, al final, en lugar
de uno cada tres segundos, que es lo que necesito.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20101025/083172e8/attachment.html>


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