我有以下脚本:
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。
我做错了什么?
百里
答案 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())