4

根据该subprocess模块的文档,它的默认 shell 是/bin/sh,但我对硬编码这些常量有一种根深蒂固的、可能是非理性的厌恶。

因此,我更喜欢引用subprocess. 我还没有找到任何方法来subprocess 直接询问这个常数。我管理过的最好的是

def _getshpath():
    return subprocess.check_output('which sh', shell=True).strip()

或者

def _getshpath():
    return subprocess.check_output('echo "$0"', shell=True).strip()

...两者看起来都非常脆弱,因为它们的有效性最终取决于我首先要确定的具体价值。(即,如果这个可执行文件的值不是“/bin/sh”,那么任何一个定义都可能很容易变得毫无意义。)

获得此路径的最佳实践是什么(没有将其硬编码为“/bin/sh”)?

谢谢!

4

2 回答 2

3

将其硬编码为 /bin/sh 是完全有效的。如果您查看 C 的 popen() 的文档,您会发现它也是这样做的。/bin/sh 在构造上是系统的标准外壳。

于 2012-04-27T23:17:38.657 回答
1

你可以试试

>>> import os
>>> shell = os.environ['SHELL']
>>> print shell
'/bin/bash'

您可以使用它来设置 的executable参数subprocess.Popen

于 2012-04-27T23:12:48.203 回答