Windows 7 64位上的Pythonsubprocess – stdout = PIPE时不输出

对于有关Pythonsubprocess的另一个问题抱歉,但我找不到答案。

我在一些调用Windows 7 64位subprocess的Python代码时遇到了麻烦。 当subprocess的stdout被发送到pipe道时,不会产生输出。 subprocess似乎运行并终止没有问题,它只是不会产生任何输出。

编辑:相同的代码在WinXP 32bit上正常工作,所以我更新了问题标题。

# (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 ) 

这给出了输出

 out: err: 

但是,如果stream程的输出不是pipe道,则会按预期生成输出:

 # (listing 2) proc = Popen(cmdline,shell=True) proc.communicate() 

这给了控制台预期的输出。

我相信可执行文件实际上是将其输出写入标准输出。 我有C源代码,我添加了这一行:

 fprintf(stdout, "HELLO"); 

再次,运行清单2时看到“HELLO”,但没有列出清单1。

我也尝试制作一个新的C ++可执行文件,并从cmdline调用它:

 #include <iostream> int main() { std::cout << "HELLO" << std::endl; } 

同样的事情仍然发生 – 运行清单2时看到“HELLO”,但没有列出清单1。

如果我将cmdline设置为'dir',预期的事情发生在列表1和列表2中 – 目录内容被打印到控制台。

其他的东西,我尝试:Python 3.3和Python 2.7(相同的结果); bufsize = 0(相同的结果); 检查proc.returncode(0,如预期); 删除stderr = PIPE(在这种情况下,清单1按预期给出“err:None”)。

编辑 – 我也试过了= proc.stdout而不是沟通()方法具有相同的结果。 Python文档和其他问题表明communic()方法是正确的。

Solutions Collecting From Web of "Windows 7 64位上的Pythonsubprocess – stdout = PIPE时不输出"