使用subprocess.Popen在Windows中运行批处理文件

时间:2018-07-02 05:57:47

标签: python windows python-3.x subprocess

为什么我们不能使用Popen运行批处理文件?

>>> p = Popen(["filename"], shell=True, stdout = PIPE) 

这很好,但是根据文档,我们不应该使用shell = True来“运行批处理文件或基于控制台的可执行文件”。

为什么shell = True在运行批处理文件时不能使用?为什么只在cmd中使用它?

1 个答案:

答案 0 :(得分:2)

在生产环境中使用subprocess.Popen()参数设置为shell来调用True是一个通常的主意。危险之一包括shell injection漏洞,如Python 3文档所引用:

  

17.5.2。安全注意事项

     

与其他一些popen函数不同,此实现绝不会隐式调用     系统外壳。这个   表示所有字符(包括外壳元字符)都可以安全   传递给子进程。如果通过显式调用外壳,则通过   shell=True,应用程序有责任确保所有   空格和元字符被适当地引用以避免shell   注入漏洞。

来源:https://docs.python.org/3.6/library/subprocess.html