Last Updated: 2023-10-04 07:31:41 Wednesday
-- TOC --
常常用subprocess模块在Python中创建子进程,但关于shell参数的理解和使用,一直都错了!不管是使用阻塞同步的subprocess.run
接口,还是异步非阻塞的subprocess.Popen
接口,都有shell这个参数。这个参数到底是什么意思?
当shell=True
的时候,cmd
参数就应该是一个完整的命令字符串,Python的subprocess模块会先用/bin/sh
创建一个shell子进程,然后在此子进程中,再执行cmd命令字符串所代表的命令。此时,cmd命令字符串可以包含shell特有的符号,比如重定向和管道符号。
好处:
坏处:
可以用执行exec命令的方式,直接在shell进程中替换执行命令,来规避坏处(1),但应该也会有一点overhead;而要规避坏处(2),就要仔细检查用户的输入了!
当shell=False
的时候,这是shell参数的默认值,cmd参数就不再是一个完整的命令字符串,而是一个tuple或list,命令和其参数被按空格拆分开来。
好处:
坏处:
现在搞懂了!^___^
当然了,用非shell的方式启动bash,也是可以的。
subprocess官网介绍:https://docs.python.org/3/library/subprocess.html
本文链接:https://cs.pynote.net/sf/python/202112082/
-- EOF --
-- MORE --