我正在尝试捕获通过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配置正常的消息。 任何帮助将不胜感激。
干杯。
答案 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