Windows 7 64位上的Python子进程 – 当stdout = PIPE时没有输出
对于另一个关于
Python子进程的问题抱歉,但我找不到这个问题的答案.
我遇到一些Python代码,它在Windows 7 64位上调用子进程.当子进程的stdout发送到管道时,不会产生任何输出.子进程似乎运行和终止没有问题,它只是不产生任何输出. 编辑:相同的代码在WinXP 32位上正常工作,所以我更新了问题标题. # (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: 但是,当子进程的输出未通过管道传输时,它会按预期生成输出: # (listing 2) proc = Popen(cmdline,shell=True) proc.communicate() 这为控制台提供了预期的输出. 我确信可执行文件实际上是将其输出写入stdout.我有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而不是带有相同结果的communic()方法. Python文档和其他问题表明,communication()方法是正确的使用方法. 解决方法
这根本不是Python的问题.我的防火墙设置已经“沙箱化”了可执行文件,这导致他们的输出被丢弃而没有任何警告或错误.
防止它们执行会更有意义.我想我需要使用不同的防火墙软件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |