根据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”)?
谢谢!
答案 0 :(得分:3)
将其硬编码为/ bin / sh完全有效。如果你看一下C's popen()的文档,你会发现它也是这样做的。通过构造,/ bin / sh是系统的标准shell。
答案 1 :(得分:1)
你可以尝试
>>> import os
>>> shell = os.environ['SHELL']
>>> print shell
'/bin/bash'
您可以使用它来设置executable
的{{1}}参数。