subprocess.Popen () redireccionamiento de IO

Intentando redirigir la salida de un subproceso a un archivo.

server.py:

while 1: print "Count " + str(count) sys.stdout.flush() count = count + 1 time.sleep(1) 

Laucher

 cmd = './server.py >temp.txt' args = shlex.split(cmd) server = subprocess.Popen( args ) 

La salida aparece en pantalla, temp.txt permanece vacío. ¿Qué estoy haciendo mal?

Como fondo, estoy tratando de capturar la salida de un progtwig que ya se ha escrito.

No puedo usar:

 server = subprocess.Popen( [exe_name], stdin=subprocess.PIPE, stdout=subprocess.PIPE) 

como el progtwig no puede vaciar. En su lugar, iba a redirigir la salida a través de un fifo. Esto funciona bien si Popen() manualmente server.py pero obviamente no si Popen() causa que la redirección no funciona. ps -aux muestra que server.py se inició correctamente.

Alternativamente, puede usar el parámetro stdout con un objeto de archivo:

 with open('temp.txt', 'w') as output: server = subprocess.Popen('./server.py', stdout=output) server.communicate() 

Como se explica en la documentación :

stdin, stdout y stderr especifican la entrada estándar del progtwig ejecutado, la salida estándar y los identificadores de archivo de error estándar, respectivamente. Los valores válidos son PIPE, un descriptor de archivo existente (un entero positivo), un objeto de archivo existente y Ninguno.

La redirección de salida con “>” es una característica de los shells; por defecto, subprocess.Popen no crea una instancia. Esto debería funcionar:

 server = subprocess.Popen(args, shell=True)