Disculpe por otra pregunta sobre los subprocesos de Python, pero no pude encontrar una respuesta a esta.Subproceso de Python en Windows 7 64bit - sin salida cuando stdout = PIPE
Tengo problemas con algún código de Python que invoca un subproceso en Windows 7 de 64 bits. Cuando el stdout del subproceso se envía a una tubería, no se produce salida. El subproceso parece ejecutarse y terminar sin problemas, simplemente no produce ningún resultado.
EDITAR: El mismo código funciona correctamente en WinXP 32bit, así que actualicé el título de la pregunta.
# (listing 1)
from subprocess import *
#cmdline= (a valid command line)
proc = Popen(cmdline,shell=True,stdout=PIPE,stderr=PIPE)
out, err = proc.communicate()
print(out)
print(err)
Esto da salida
out:
err:
Sin embargo, cuando la salida del subproceso no es hilo, se produce una salida como se esperaba:
# (listing 2)
proc = Popen(cmdline,shell=True)
proc.communicate()
Esto da el resultado esperado a la consola.
Estoy seguro de que el ejecutable está escribiendo su salida a stdout. Tengo el código fuente en C, y añadí la línea:
fprintf(stdout, "HELLO");
Una vez más, "HOLA" se ve cuando se ejecuta el Listado 2, pero no en la lista 1.
También intenté hacer un nuevo C++ ejecutable y llamando a que desde cmdline:
#include <iostream>
int main()
{
std::cout << "HELLO" << std::endl;
}
lo mismo sigue sucediendo - "HOLA" se ve cuando se ejecuta el listado 2, pero no en la lista 1.
Si fijo línea_de_órdenes a 'dir', lo esperado Happe ns para el listado 1 y el listado 2 - los contenidos del directorio se imprimen en la consola.
Otras cosas que probé: Python 3.3 y Python 2.7 (mismos resultados); bufsize = 0 (mismos resultados); comprobando proc.returncode (es 0, como se esperaba); eliminando stderr = PIPE (en cuyo caso el listado 1 da "err: None" como se esperaba).
EDITAR - También probé = proc.stdout en lugar del método de comunicación() con los mismos resultados. La documentación de Python y otras preguntas sugieren que el método de comunicación() es el correcto para usar.
intente algunos ejemplos de [¿Cómo obtengo todos los resultados de mi .exe utilizando subproceso y Popen?] (Http://stackoverflow.com/a/12606327/4279) – jfs
¿cómo ejecuta el script? ¿Qué es cmdline? – jfs
Gracias. Ya intenté hacer readline() en proc.stdout en lugar de usar comunicar() pero esto todavía no produce ningún resultado. La documentación de Python y otras preguntas sobre stackoverflow sugieren que se prefiere el método de comunicación(), así que lo escribí de esa manera en mi pregunta. Edité la pregunta para agregar esta información. La línea de comando para ejecutar el script es solo C: \ Python27 \ python.exe myscript.py. –