Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不鼓励从Python脚本调用Windows命令行吗?_Python_Python 3.x_Windows_Cmd - Fatal编程技术网

不鼓励从Python脚本调用Windows命令行吗?

不鼓励从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

与运行具有同等功能的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:
        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...