Python 通过子流程捕获输出,不使用通信

Python 通过子流程捕获输出,不使用通信,python,subprocess,ipc,Python,Subprocess,Ipc,我正在使用subprocess调用Python脚本中的外部程序。外部程序产生大量输出。我需要捕获这个程序的输出。当前代码如下所示: process = subprocess.Popen('cmd.exe', shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=None) process.stdin.write('gams "indus89.gms"\r\n') while process.poll() != Non

我正在使用subprocess调用Python脚本中的外部程序。外部程序产生大量输出。我需要捕获这个程序的输出。当前代码如下所示:

process = subprocess.Popen('cmd.exe', shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=None)
process.stdin.write('gams "indus89.gms"\r\n')
while process.poll() != None:
    line = process.stdout.readline()
    print line
我用这段代码得到的错误是

进程试图写入不存在的管道

如果我使用以下代码:

process = subprocess.Popen('cmd.exe', shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=None)
process.stdin.write('gams "indus89.gms"\r\n')
o, e = process.communicate()
print o 
那么程序的输出就不会被捕获

我应该如何修改代码,以便在第三方程序运行时捕获它的输出?

Popen太过分了

尝试:


希望这能在您的环境中起作用。

为什么要使用
cmd.exe
shell=False
,为什么不使用
shell=True
来使用
gams“indus89.gms”
?我试过了,但仍然无法捕获需要捕获的输出。对不起,我正在运行旧代码。现在一切正常。谢谢你的帮助。。
output = subprocess.check_output('gams "indus89.gms"\r\n', shell=True)