我刚开始使用Python的子进程模块。
subprocess.call("ls", shell = False)
和 subprocess.call("ls", shell = True)
这两行代码都会返回相同的结果。我只是想知道这两个shell选项之间的主要区别。
我刚开始使用Python的子进程模块。
subprocess.call("ls", shell = False)
和 subprocess.call("ls", shell = True)
这两行代码都会返回相同的结果。我只是想知道这两个shell选项之间的主要区别。
如果 shell 参数为 True,则通过 shell 执行指定的命令。这可以很有用,如果你主要使用 Python 来增强对大多数系统 shell 的控制流,并且仍然想方便地访问其他 shell 功能,如 shell 管道、文件名通配符、环境变量扩展和 ~ 扩展到用户的主目录。但请注意,Python 本身提供了许多类似 shell 的功能实现(特别是 glob、fnmatch、os.walk()、os.path.expandvars()、os.path.expanduser() 和 shutil)。
这样会打开你的代码以接受可能存在的 shell 注入技术,这个问题可以在这里更好地解释:
例如,在 Windows 计算机上,如果 shell 被设置为 false,如下所示:
import subprocess
subprocess.Popen("dir", shell = False)