subprocess 模块可以使 Python 执行外部命令(Linux)和程序(exe),并得到相应的输出结果,进一步处理。在 Python3.5 中,subprocess 模块取代了 os.system、os.spawn* 。该模块很好地体现了 Python 胶水语言的特性,丰富了 Python 的拓展能力,故本文接下来主要介绍 subprocess 模块的用法,并简单说明在 Python2/3 中的使用区别。
速查表
Python2
Python3.5
subprocess.call(...)
subprocess.run(...)
subprocess.check_call(...)
subprocess.run(..., check=True)
subprocess.check_output(...)
subprocess.run(..., check=True, stdout=PIPE).stdout
subprocess.Popen(...)
subprocess.Popen(...)
通过上表可以看到,在 Python2 中 subprocess 模块共有三个函数 call、check_call、check_output 和一个类 Popen ,本质上这三个函数都是基于类 Popen 的封装,可以更简单地执行程序和获得输出。而在 Python3.5 中,三个函数可以通过 run 函数和参数设置来使用,同时这三个函数也可以在 Python3.5 中使用。
执行外部命令和程序
1 import subprocess
2 subprocess.call(["ls", "-l"])
3 subproc