获取Python子进程的输出
我正在尝试捕捉这里的输出。如果在Python的命令行中,我运行
p = subprocess.Popen(["/path/to/search_by_hash.par", hash_str],
stdout=subprocess.PIPE)
返回的值(一个列表)会打印到标准输出,但没有被捕捉到
[4460475, 4406612, 4379510]
我尝试在后面加上
value = p.communicate()[0]
value
...但是得到的值是一个空字符串,而不是我期待的整数列表,这个列表确实在标准输出中被打印出来了
我试过从存储subprocess.Popen调用的输出到字符串中找到解决方案,但还是没能捕捉到输出。
更新:
标准错误输出似乎也没有任何结果...而我想要的列表确实被打印出来了...只是没有运气能捕捉到它。请看下面:
>>> p = subprocess.Popen(["/home/jfry/tools/search_by_hash.par", hash_str],
stdout=subprocess.PIPE)
>>>
[4460475, 4406612, 4379510]
value, err = p.communicate()
>>> value
''
>>> err
谢谢!
3 个回答
1
communicate是一个方法。所以你应该去调用它!
out = p.communicate()
5
因为之前的回答对我来说并没有解决问题:
要捕获 stderr
的输出,需要做以下操作:
import subprocess
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = p.communicate()
关键在于参数 stderr=subprocess.PIPE
,如果没有这个参数,stderr
的输出就无法被捕获,err
将会是 None
。
如果你只对 stderr
的输出感兴趣,其实可以使用:
p = subprocess.Popen(command, stderr=subprocess.PIPE)
err = p.communicate()[1]
在这种情况下,p.communicate()[0]
的值将是 None
。
5
试着用 p.communicate()[1]
来查看 stderr
的内容。