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

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

方法调用不同的进程。subprocess模块。不过,我有个问题。

在下列守则中:

callProcess = subprocess.Popen(['ls', '-l'], shell=True)

callProcess = subprocess.Popen(['ls', '-l']) # without shell

都有用。在看了医生之后,我才知道shell=True意味着通过shell执行代码。因此,这意味着在不存在的情况下,这个过程是直接开始的。

那么,对于我的情况,我应该选择什么-我需要运行一个进程并得到它的输出。我从壳内或外部调用它有什么好处。


慕的地10843
浏览 1253回答 3
3回答

九州编程

通过shell执行程序意味着根据调用的shell的语法和语义规则来解释传递给程序的所有用户输入。充其量,这只会给用户带来不便,因为用户必须遵守这些规则。例如,必须转义包含特殊shell字符(如引号或空白)的路径。最坏的情况是,它会导致安全漏洞,因为用户可以执行任意程序。shell=True有时可以方便地使用特定的shell特性,如分词或参数展开。但是,如果需要这样的功能,则需要使用其他模块。os.path.expandvars()用于参数展开或shlex用于分词)。这意味着要做更多的工作,但要避免其他问题。简而言之:避免shell=True千方百计。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python