【问题标题】:Regarding the subprocess module and the keyword argument shell关于子进程模块和关键字参数shell
【发布时间】:2021-01-24 10:41:56
【问题描述】:
我是 Python 初学者,请您帮我理解以下概念。
如果我执行以下操作,
import subprocess
subprocess.run(['ls'])
这里我们知道关键字参数 shell 默认设置为 False,因此 'ls' 不会在 shell 上运行。但我的问题是如果它不在 shell 上运行,它在哪里运行以及它如何给我一个输出?
【问题讨论】:
标签:
python
python-3.x
python-2.7
subprocess
popen
【解决方案1】:
我有一个 Windows 系统,但它应该可以工作。
要获取子进程的输出,您可以使用 check_output。
在窗户上 -
import subprocess
subprocess.check_output(["dir"], shell=True)
在没有 shell=True 的情况下运行此代码将导致错误。
如果我想用 shell=False 运行上面的代码
我会做这样的事情-
subprocess.check_output(["cmd","/c","dir"], shell=False)
通知-
在 shell=True 的 Unix 上,shell 默认为 /bin/sh。
这意味着当你传递命令并使用 shell=True
它将使用 /bin/sh 来运行该命令。