我发现大多数程序员建议使用字符串列表来表示 popen 中的命令。然而,在我自己的项目中,我发现整个字符串在更多情况下都有效。
例如下面的作品
subprocess.Popen('pgrep -f "\./run"', stdout=subprocess.PIPE, shell=True).wait()
while
subprocess.Popen(['pgrep', '-f', '"\./run"'], stdout=subprocess.PIPE, shell=True).wait()
才不是。
我可以知道这两种实现方式有什么区别,为什么第二种方式不能按预期工作?
第二个不应该有shell=True
范围。相反,它应该是:subprocess.Popen(['pgrep', '-f', '"\./run"'], stdout=subprocess.PIPE).wait()
.
The shell
参数设置是否在单独的 shell 中执行命令。也就是说,如果应该生成一个新的 shell 来执行命令,则该命令必须由 shell 解释才能运行。
然而,当提供字符串列表时,这不会产生第二个 shell,因此(至少)更快。它也更适合用于处理变量输入,因为它避免了字符串插值。
See: https://stackoverflow.com/a/15109975/1730261 https://stackoverflow.com/a/15109975/1730261
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)