为了账号安全,请及时绑定邮箱和手机立即绑定

子过程中“shell=True”的实际意义

子过程中“shell=True”的实际意义

慕的地10843 2019-06-06 13:52:45
子过程中“shell=True”的实际意义方法调用不同的进程。subprocess模块。不过,我有个问题。在下列守则中:callProcess = subprocess.Popen(['ls', '-l'], shell=True)和callProcess = subprocess.Popen(['ls', '-l']) # without shell都有用。在看了医生之后,我才知道shell=True意味着通过shell执行代码。因此,这意味着在不存在的情况下,这个过程是直接开始的。那么,对于我的情况,我应该选择什么-我需要运行一个进程并得到它的输出。我从壳内或外部调用它有什么好处。
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

通过shell执行程序意味着根据调用的shell的语法和语义规则来解释传递给程序的所有用户输入。充其量,这只会给用户带来不便,因为用户必须遵守这些规则。例如,必须转义包含特殊shell字符(如引号或空白)的路径。最坏的情况是,它会导致安全漏洞,因为用户可以执行任意程序。

shell=True有时可以方便地使用特定的shell特性,如分词或参数展开。但是,如果需要这样的功能,则需要使用其他模块。os.path.expandvars()用于参数展开或shlex用于分词)。这意味着要做更多的工作,但要避免其他问题。

简而言之:避免shell=True千方百计。


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 1252 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信