如何获得Python的“canonical unix shell”

时间:2012-04-27 22:47:13

标签: python shell

根据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”)?

谢谢!

2 个答案:

答案 0 :(得分:3)

将其硬编码为/ bin / sh完全有效。如果你看一下C's popen()的文档,你会发现它也是这样做的。通过构造,/ bin / sh是系统的标准shell。

答案 1 :(得分:1)

你可以尝试

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

您可以使用它来设置executable的{​​{1}}参数。