【问题标题】:Why is os.system() not the recommended way to execute shell commands? [duplicate]为什么 os.system() 不是执行 shell 命令的推荐方式? [复制]
【发布时间】:2019-12-09 03:00:11
【问题描述】:

根据this

在上一节中,我们看到os.system() 函数工作正常。但不推荐执行 shell 命令的方式。我们将使用 Python 子进程模块来执行系统命令。

作者从未在他/她的帖子中提到为什么os.system() 不是推荐的方式。我可以知道为什么不推荐它吗?

os.system() 中是否有任何安全漏洞导致不推荐执行 shell 命令?

【问题讨论】:

    标签: python


    【解决方案1】:

    os.system 只接受一个包含 shell 命令的字符串作为参数。这要求用户在运行所需的命令之前了解 shell 将如何处理字符串。

    来自它自己的文档:

    子流程模块提供了更强大的工具来生成新流程并检索其结果;使用该模块优于使用此功能。有关一些有用的秘诀,请参阅子流程文档中的用子流程模块替换旧功能部分。

    【讨论】:

    • 谢谢@chepner。所以这与安全无关? 更新后 os.system() 中是否有任何安全漏洞导致不推荐使用 shell 命令执行方式?
    • 安全性涉及其中,因为您可能很想构造像os.system("someCommand " + argument) 这样的命令字符串。这为您打开了代码注入的可能性,因为argument 不是someCommand 的单个参数;它是任意代码,当与someCommand 结合使用时,会形成一个shell 必须解析的命令行。 subprocess.Popen(["someCommand", argument]) 符合您的期望和意图:它使用单个参数运行 someCommand
    猜你喜欢
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2019-09-02
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多