子进程中的Python和别名

时间:2014-09-22 19:15:30

标签: python bash alias

为什么这不起作用:

command = "source InitVariables.sh ; run_simnogui"
r = subprocess.call(command, shell=True,executable='/bin/bash') 

输出

/bin/bash: run_simnogui: command not found

我在任何地方使用此脚本并且它有效,它将run_simnogui定义为别名,然后它应该在子进程中可用...?

1 个答案:

答案 0 :(得分:0)

问题是shell将以下文本作为单个命令行接收:

source InitVariables.sh ; run_simnogui

在执行任何输入之前执行别名扩展,因此在需要扩展时尚未定义run_simnogui。一旦扩展了这一行,shell只会在你的路径中查找名为run_simnogui的内置命令或这样的命令,因此它会失败。

解决方案,就像使用别名一样,是使用shell函数。将run_simnogui定义为InitVariables.sh中的函数:

run_simnogui () {
    # Put body here
}

现在,当您调用subprocess.call时,run_simnogui的查找将成功,因为该名称的函数由之前的source命令定义。