不鼓励从Python脚本调用Windows命令行吗?
与运行具有同等功能的Python代码相比,从Python脚本调用windows cmd有哪些缺点 我的代码如下:不鼓励从Python脚本调用Windows命令行吗?,python,python-3.x,windows,cmd,Python,Python 3.x,Windows,Cmd,与运行具有同等功能的Python代码相比,从Python脚本调用windows cmd有哪些缺点 我的代码如下: import subprocess def runWinCmd(cmd): result = [] process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) for line in process.stdout: re
import subprocess
def runWinCmd(cmd):
result = []
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for line in process.stdout:
result.append(line)
errcode = process.returncode
return errcode
参数shell=True
不能是安全隐患
从
警告:使用shell=True可能会造成安全隐患。有关详细信息,请参阅“常用参数”下的警告
:
警告:执行包含来自不受信任源的未初始化输入的shell命令会使程序易受shell注入攻击,这是一个严重的安全缺陷,可能导致任意命令执行。因此,在命令字符串由外部输入构造的情况下,强烈建议不要使用shell=True:
例如:
>>> from subprocess import call
>>> filename = input("What file would you like to display?\n")
What file would you like to display?
non_existent; rm -r dir1 / # {delete something -- like a directory}
>>> call("cat " + filename, shell=True) # Uh-oh. This will end badly...
您还可以使用内置库。请参见
os.system()
您的问题是什么?关于什么?你把它和什么做比较?我会说它纯粹是基于意见的。我想这是因为Windows的优点和缺点,它是高度基于意见的。“从Python脚本调用Windows cmd有什么缺点?”与确切的内容相比?与运行PowerShell命令相比?或者与运行unix终端命令进行比较?或者与运行具有同等功能的python代码进行比较?还是别的什么?不清楚你在这里所说的cmd
是什么意思。有许多命令行程序与“CMD”shell无关,它们在必要时非常有用,特别是那些使用本机Unicode命令行并可以配置为将Unicode(UTF-16或UTF-8)写入管道的程序。有些甚至会输出XML或CSV,与解析表格或自由格式输出相比,在Python中很容易进行可靠的解析。这些程序应该使用默认的shell=False
来执行。我想知道以这个rm rf为例是否是个好主意?因为如果一个真正的初学者想尝试这一点,结果会很糟糕。谢谢你让我关注安全问题,因为我只是想知道是否会有内存问题(Python初学者)。@vgalin。法拉。这当然取决于应用程序。顺便说一句,没有rm
windowsshell命令。但这不是问题所在
>>> from subprocess import call
>>> filename = input("What file would you like to display?\n")
What file would you like to display?
non_existent; rm -r dir1 / # {delete something -- like a directory}
>>> call("cat " + filename, shell=True) # Uh-oh. This will end badly...