首页 > 解决方案 > 关于子进程模块和关键字参数shell

问题描述

我是 Python 的初学者,您能帮我理解以下概念吗?

如果我执行以下操作,

import subprocess
subprocess.run(['ls'])

在这里,我们知道关键字参数shell默认设置为False,因此“ls”不会在 shell 上运行。但我的问题是,如果它不在 shell 上运行,它在哪里运行,它如何给我一个输出?

标签: pythonpython-3.xpython-2.7subprocesspopen

解决方案


我有一个 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 来运行该命令。


推荐阅读