捕获python子进程的输出

时间:2016-02-28 03:08:42

标签: python nginx subprocess

我正在尝试捕获通过python脚本执行的命令的输出。 我知道有很多关于如何做到这一点的例子,但我无法得到解决方案。

示例:

此示例有效:

#!/usr/bin/python
import subprocess
process = subprocess.Popen(['whoami'], stdout=subprocess.PIPE)
stdout = process.communicate()[0]
print 'STDOUT:{}'.format(stdout)

结果:

houhou@box:~/Documents$ python example.py
STDOUT:houhou

这不起作用:

我需要运行以下命令:'nginx -t'

import subprocess
process = subprocess.Popen(['nginx', '-t'], stdout=subprocess.PIPE)
stdout = process.communicate()[0]
print 'STDOUT:{}'.format(stdout)

结果:

houhou@box:~/Documents$ python example.py
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
STDOUT:

我不知道如何捕获此输出。在python可以读取它之前,它看起来像是表明nginx配置正常的消息。 任何帮助将不胜感激。

干杯。

1 个答案:

答案 0 :(得分:2)

'zondo'在评论中正确预测,'nginx'将上述消息发送给stderr,您可以修改您的代码以阅读该消息 -

>>> process = subprocess.Popen(['nginx', '-t'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> out,err = process.communicate()
>>> print out

>>> print err
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful