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'))
7 回答5.6k 阅读
2 回答4.3k 阅读✓ 已解决
4 回答4.2k 阅读
2 回答850 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答838 阅读✓ 已解决
2 回答2.1k 阅读✓ 已解决