python subprocess 模块的 check_output 函数能够用于执行一个shell命令,并返回命令的输出内容。同Popen相比较,check_output 侧重于获取命令执行后的输出内容,所以适合于执行可以快速得到相应的命令,由于check_output会阻塞程序,直到命令执行结束返回结果,为此还增长了一个timeout参数来防止超时。python
以查看linux服务器的文件系统类型为例,编写代码以下:linux
import subprocess
output = subprocess.check_output(['df', '-T'])
output = output.decode()
print(output)
check_output的返回值的类型是bytes, 若是想用str, 可使用decode方法进行解码。shell
若是执行命令过程当中发生错误则会引起CalledProcessError,为了安全起见,你应该捕获异常并处理安全
import subprocess
try:
output = subprocess.check_output(['df', 'T'], stderr=subprocess.STDOUT)
output = output.decode()
print(output)
except subprocess.CalledProcessError as e:
out_bytes = e.output.decode()
code = e.returncode
print(code, out_bytes)
在上面的代码里,我增长了stderr参数,这是由于check_output只会将输入到标准输出的值返回,若是命令执行过程当中产生了一些错误输出,那么这部分就没法获取了,所以须要指定stderr 为 subprocess.STDOUT, 这样错误信息也会被收集。特别说明的是,这里所说的错误输出与CalledProcessError是风马牛不相及的两个事物,有错误输出不表明命令执行出现了异常,就比如你使用logging模块输出ERROR日志,可是你的程序还在正常运行,只不过是将错误信息与正常信息分开输出而已。服务器
本文分享自微信公众号 - coolpython(coolpython)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。微信