在python开发期间,很多时候我们会需要执行一段cmd终端命令,或者是执行其他程序返回stdout或者文件输出结果。这种时候,我们就需要用到subprocess模块。虽然我们用os.system也可以达到执行命令的需求,但用os.system只是干发一段命令,对于执行命令的程序,我们没有办法跟踪它的内部状态以及执行结果,因此从稳定性的角度来讲不是一个好的选择。因此,本篇文章讲解下subprocess子进程模块的的基础应用,让没用过这个模块或是经常踩坑的同学都避避坑。
subprocess模块的官方文档在这里,最核心的单位是subprocess.Popen类,它描述了一个正在运行中的进程。subprocess最基础的用法是subprocess.run,我们入参一段cmd终端命令,run方法内部就会启动一个Popen对象执行这个命令,等待命令执行结束后,返回这个命令执行的退出码retcode,标准输出流内容stdout以及标准错误流内容stderr。我们可以从源码中详细捋一下subprocess.run的流程: