Python 通过子流程捕获输出,不使用通信
我正在使用subprocess调用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
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)