subprocess.popen, capturar stdout
Oswaldo Hernández
listas en soft-com.es
Mar Oct 30 18:11:22 CET 2007
Hola, gracias por contestar,
Arnau Sanchez escribió:
...
>
> Prueba y nos dices si algo de esto te funciona.
>
He probado con y sin generador y el resultado es el mismo. Hasta que no acaba la aplicación no
obtengo el stdout, no se si el problema puede estar en otro sitio.
Para realizar la prueba he creado dos scripts:
- runapp.py ---------------------------------
#!/usr/bin/env python
#coding=utf-8
import subprocess
import time
def runapp(app):
pr = subprocess.Popen(app.split(), stdin=None, stdout = subprocess.PIPE, stderr=subprocess.PIPE)
for line in readlines(pr.stdout):
print "local:%s, app:%s" % (time.time(), line),
#for line in pr.stdout:
# print "local:%s, app:%s" % (time.time(), line),
#pr.wait()
print "finalizado con codigo %s" % pr.poll()
def readlines(fd):
while 1:
line = fd.readline()
if not line:
break
yield line
# ejecucion
runapp("python testrunapp.py")
- testrunapp.py ---------------------------------
#!/usr/bin/env python
#coding=utf-8
import time
#enviar a stdout el tiempo cada segundo durante 10 segundos
veces = 10
ahora = time.time()
while veces > 0:
while time.time() < ahora + 1:
pass
ahora = time.time()
print ahora
veces -= 1
Al ejecutar runapp.py este llama a testrunapp.py, toma su stdout y lo imprime junto con el time en
el que lee el stdout.
El resultado tanto en XP como en una maquina debian, ambas con python 2.5 es el siguiente:
oswaldo en server2:/home/X/Python/Otros/AutoBackup$ python runapp.py
local:1193764260.66, app:1193764251.65
local:1193764260.66, app:1193764252.65
local:1193764260.66, app:1193764253.65
local:1193764260.66, app:1193764254.65
local:1193764260.66, app:1193764255.65
local:1193764260.66, app:1193764256.65
local:1193764260.66, app:1193764257.65
local:1193764260.66, app:1193764258.65
local:1193764260.66, app:1193764259.65
local:1193764260.67, app:1193764260.65
finalizado con codigo 0
Como veras la aplicacion auxiliar envia un resultado cada segundo, pero el programa principal los
recibe todos al finalizar.
--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es