【发布时间】:2013-03-26 13:15:06
【问题描述】:
我有一个 Python 程序需要执行不同的进程(为此我使用 subprocess.Popen)。我需要这个执行来表现得好像用户在 shell 命令提示符下键入了以下内容:
$ source path/to/some_file
$ ./some_program
我希望我将使用shell=True 和某种形式的命令链接首先运行source,然后执行程序。但是,我面临以下问题:
启动我的 Python 程序的 shell 可以是 bash、sh、tcsh(或者可能是 csh 的其他形式)。我需要根据正在运行的 shell 获取不同的some_file。有没有办法确定这一点?在 Python 中或通过在 Popen(..., shell=True) 中运行某些东西,两者都可以。
我正在考虑编写某种“shell polyglot”来从不同的 shell 中获得不同的输出,但是我的 shell 技能(尤其是在 csh 中)不能胜任这样的任务。我有什么选择?
【问题讨论】:
-
您可以通过使用executable 参数和
shell=True来强制使用特定的shell。 -
在 Unix 上,无论用户实际使用哪个 shell,使用的 shell 默认为 /bin/sh。
-
@Cairnarvon,是的,但是 /bin/sh 在不同的 linux 上被符号链接到不同的东西。
-
不鼓励使用
shell=True.. -
@PavelAnossov,/bin/sh 是 POSIX 的一部分;如果替代品不提供其功能的超集,它们就会损坏。我不知道有任何类似 Unix 的东西。