长文预警 阅读约5分钟
相信如果你慢慢把这篇文章读完,然后合并实践
subprocess模块主要用于创建子进程,并连接它们的输入、输出和错误管道,获取它们的返回状态。通俗地说就是通过这个模块,你可以在Python的代码里执行操作系统级别的命令,比如“ipconfig”、“du -sh”等等。subprocess模块替代了一些老的模块和函数,比如:
os.system
os.spawn*
subprocess过去版本中的call()
,check_call()
和check_output()
已经被run()
方法取代了。run()
方法为3.5版本新增。
大多数情况下,推荐使用run()
方法调用子进程,执行操作系统命令。在更高级的使用场景,你还可以使用Popen接口。其实run()
方法在底层调用的就是Popen接口。
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, encoding=None, errors=None)
功能:执行args参数所表示的命令,等待命令结束,并返回一个CompletedProcess类型对象。
注意,run()方法返回的不是我们想要的执行结果或相关信息,而是一个CompletedProcess类型对象。
上面参数表里展示的只是一些常用的,真实情况还有很多。
args:表示要执行的命令。必须是一个字符串,字符串参数列表。
stdin、stdout和stderr:子进程的标准输入、输出和错误。其值可以是subprocess.PIPE
、subprocess.DEVNULL
、一个已经存在的文件描述符、已经打开的文件对象或者None。subprocess.PIPE
表示为子进程创建新的管道。subprocess.DEVNULL
表示使用os.devnull
。默认使用的是None,表示什么都不做。另外,stderr可以合并到stdout里一起输出。
timeout:设置命令超时时间。如果命令执行时间超时,子进程将被杀死,并弹出TimeoutExpired
异常。
check:如果该参数设置为True,并且进程退出状态码不是0,则弹出CalledProcessError
异常。
encoding:如果指定了该参数,则stdin、stdout和stderr可以接收字符串数据,并以该编码方式编码。否则只接收bytes类型的数据。
shell:如果该参数为Tr