未能从应用程序捕获stdout

时间:2011-05-23 08:25:12

标签: python python-3.x

我有以下脚本:

import subprocess

arguments = ["d:\\simulator","2332.txt","2332.log", "-c"]

output=subprocess.Popen(arguments, stdout=subprocess.PIPE).communicate()[0]
print(output)

给我b''作为输出。

我也试过这个剧本:

import subprocess

arguments = ["d:\\simulator","2332.txt","atp2332.log", "-c"]
process = subprocess.Popen(arguments,stdout=subprocess.PIPE)
process.wait()

print(process.stdout.read())
print("ERROR:" + str(process.stderr))

给出了输出:b'',ERROR:None

但是当我在cmd提示符下运行时,我得到了5行文本。

  

d:\ simulator atp2332.txt atp2332.log -c

我已经在模拟器中添加了一个消息框,它会在启动时弹出。这是针对所有三种情况的。所以我知道我成功启动了模拟器。然而,python脚本没有捕获stdout。

我做错了什么?

百里

2 个答案:

答案 0 :(得分:2)

如果可能(不是无休止的数据流),您应该使用页面上提到的communicate()

试试这个:

import subprocess

arguments = ["d:\\simulator","2332.txt","atp2332.log", "-c"]
process = subprocess.Popen(arguments, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
sout, serr = process.communicate()

print(sout)
print(serr)

答案 1 :(得分:1)

以下代码为我提供了stdout上的文本输出。 也许你可以尝试一下,然后用命令代替帮助

import subprocess

arguments = ["help","2332.txt","atp2332.log", "-c"]
process = subprocess.Popen(arguments,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process.wait()

print 'Return code', process.returncode
print('stdout:', process.stdout.read())
print("stderr:" + process.stderr.read())