为什么我们不能使用Popen
运行批处理文件?
>>> p = Popen(["filename"], shell=True, stdout = PIPE)
这很好,但是根据文档,我们不应该使用shell = True
来“运行批处理文件或基于控制台的可执行文件”。
为什么shell = True
在运行批处理文件时不能使用?为什么只在cmd中使用它?
答案 0 :(得分:2)
在生产环境中使用subprocess.Popen()
参数设置为shell
来调用True
是一个通常的主意。危险之一包括shell injection漏洞,如Python 3文档所引用:
17.5.2。安全注意事项
与其他一些popen函数不同,此实现绝不会隐式调用 系统外壳。这个 表示所有字符(包括外壳元字符)都可以安全 传递给子进程。如果通过显式调用外壳,则通过
shell=True
,应用程序有责任确保所有 空格和元字符被适当地引用以避免shell 注入漏洞。