Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 7 64位上的Python子进程-stdout=PIPE时无输出_Python_Windows_Subprocess_Popen - Fatal编程技术网

Windows 7 64位上的Python子进程-stdout=PIPE时无输出

Windows 7 64位上的Python子进程-stdout=PIPE时无输出,python,windows,subprocess,popen,Python,Windows,Subprocess,Popen,对于另一个关于Python子流程的问题,我深表歉意,但我找不到这个问题的答案 我遇到了一些Python代码的问题,这些代码在Windows7 64位上调用子进程。将子流程的标准输出发送到管道时,不会生成任何输出。子流程看起来运行和终止都没有问题,只是不产生任何输出 编辑:相同的代码在WinXP 32位上正常工作,所以我更新了问题标题 # (listing 1) from subprocess import * #cmdline= (a valid command line) proc = Pop

对于另一个关于Python子流程的问题,我深表歉意,但我找不到这个问题的答案

我遇到了一些Python代码的问题,这些代码在Windows7 64位上调用子进程。将子流程的标准输出发送到管道时,不会生成任何输出。子流程看起来运行和终止都没有问题,只是不产生任何输出

编辑:相同的代码在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()
这为控制台提供了预期的输出

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

fprintf(stdout, "HELLO");
同样,在运行清单2时会看到“HELLO”,而不是清单1

我也尝试了一个新的C++执行文件,并从CMDLIN调用:

#include <iostream>

int main()
{
    std::cout << "HELLO" << std::endl;
}
#包括
int main()
{

std::cout这根本不是Python的问题。我的防火墙设置“沙盒”了可执行文件,这导致它们的输出在没有任何警告或错误的情况下被丢弃


阻止它们执行会更有意义。我想我需要使用不同的防火墙软件。

尝试一些示例,了解如何运行脚本?什么是cmdline?谢谢。我已经尝试在proc.stdout上执行readline()而不是使用communicate()但是这仍然不会产生任何输出方法是首选的,所以我在问题中就是这样写的。我编辑了问题以添加此信息。运行脚本的命令行是C:\Python27\python.exe myscript.py。所以检查输出,检查调用,通信(完全如我的回答所示),winpexpect等在您的情况下不起作用?检查输出、检查调用和通信(如您的答案所示)都有相同的结果,这是有意义的,因为它们都包装了Popen。我将尝试winpexpect,但我仍然想找出为什么Popen对我不起作用。为什么可执行文件在没有
stdout=PIPE
的情况下生成输出?可能有一些原因利用管道的方法?无论如何,他们应该记录一条大的警告消息,说“program.exe的输出被禁用”…这很有趣。
hello.exe>Output.txt
是否生成空文件,但仅仅
hello.exe
打印hello?Python中的前者:
以open('Output.txt',wb')作为f:check_调用(r.\hello.exe',stdout=f)
后者可能会被pexpect模块(其Windows模拟版)模拟。我遇到了同样的问题,但我关闭了电脑上的防火墙。我试图通过java、C或python启动应用程序,但它们都无法捕获启动的应用程序的输出。你有什么想法吗?我被卡住了。