os.popen(cmd)并不能获取到,但是在linux终端上却输出了successful或failed结果
因为输出在stderr
里而不在stdout
里,简单的方法就是直接把stderr
重定向到stdout
里就有了,在cmd
后加 2>&1
,例如:
nginx -t 2>&1
2
是一个文件描述符,默认打开的是stderr
,1
也是文件描述符,默认打开的是stdout
,2>&1
表示把stderr
重定向到stdout
。如果你好奇的话,0
是stdin
。
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'))
15 回答8.4k 阅读
7 回答5.3k 阅读
4 回答4.4k 阅读✓ 已解决
4 回答4k 阅读
4 回答3.8k 阅读✓ 已解决
2 回答5.9k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决