python 怎么获取nginx -t的结果输出呢?

os.popen(cmd)并不能获取到,但是在linux终端上却输出了successful或failed结果

阅读 3.5k
4 个回答
cmd = 'nginx -t'
status, output = commands.getstatusoutput(cmd)
print status, output

因为输出在stderr里而不在stdout里,简单的方法就是直接把stderr重定向到stdout里就有了,在cmd后加 2>&1,例如:

nginx -t 2>&1

2是一个文件描述符,默认打开的是stderr1也是文件描述符,默认打开的是stdout2>&1表示把stderr重定向到stdout。如果你好奇的话,0stdin

import commands

cmd = '/usr/sbin/nginx -t'
code, output = commands.getstatusoutput(cmd)
print code
print output

原因 @Untitled 同学已经解释,而os.popen比较简单,不能捕获stderr,你可以使用subprocess.Popen

import subprocess

cmd = 'nginx -t'
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(proc.stderr.read().decode('ascii'))
推荐问题