python subprocess 模块的 check_output 函数可以用于执行一个shell命令,并返回命令的输出内容。同Popen相比较,check_output 侧重于获取命令执行后的输出内容,因此适合于执行能够快速获得相应的命令,因为check_output会阻塞程序,直到命令执行结束返回结果,为此还增加了一个timeout参数来防止超时。
以查看linux服务器的文件系统类型为例,编写代码如下:
import subprocess
output = subprocess.check_output(['df', '-T'])
output = output.decode()
print(output)
check_output的返回值的类型是bytes, 如果想用str, 可以使用decode方法进行解码。
如果执行命令过程中发生错误则会引发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,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




