当shell
为True时,第一个参数附加到["/bin/sh", "-c"]
。如果该参数是一个列表,则结果列表为
["/bin/sh", "-c", "ls", "-al"]
也就是说,仅ls
,notls -al
用作-c
选项的参数。-al
用作外壳本身的第一个参数,而不是ls
。
使用时shell=True
,通常只需要传递一个字符串,然后让外壳程序根据外壳程序的常规分词规则对其进行拆分。
# Produces ["/bin/sh", "-c", "ls -al"]
subprocess.call("ls -al", shell=True)
就您而言,似乎根本不需要使用shell=True
。