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

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

阅读 3.3k
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'))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题