Bash OSX 上的 python 脚本中的可编程完成不会持续存在

Bash programable completion in python script on OSX wont persist

我正在尝试在 python 脚本中设置 Bash 制表符完成,但似乎无法在脚本结束后继续完成。我现在正在尝试的是:

from subprocess import call
options = {'option1' : option1,
           'option2' : option2}
all_options = string.join(options.keys())
call('complete -W "%s" -f python_cmd' %all_options, shell=True)

其中 python_cmd 是一个 python 脚本,它将其中一个选项作为其第一个参数。在 运行 此脚本之后,选项将不会在命令后完成。如果我直接从命令行调用完整的命令,这很好用,但我需要能够从 python 调用它。我猜这与以脚本结尾的 call() 有关。任何人都知道我如何才能在脚本结束后保持这种状态?

我找到了一些有用的东西。我更新了我的问题以更好地反映我正在尝试做的事情的目的。我希望能够从字典中获取选项,当 运行 宁一个使用这些选项的 python 脚本时,这些选项将在命令行上完成。这样做的原因是选项会经常添加或更改,所以我不希望用户每次 运行 此命令的设置脚本时都必须添加到他们的 bashrc 或资源他们的 bashrc。我发现有效的是只用 eval 和反引号向 bashrc 添加一行,所以如果我有一个脚本可以得到答案中的选项:

## getOptions.py
import sys
options = {'option1' : option1,
           'option2' : option2}
all_options = string.join(options.keys())
sys.stdout.write('complete -W "%s" -f cmd' %all_options)

然后我可以将行添加到 bashrc(或从设置脚本 运行):

eval `getOptions.py`  #backticks, not single quotes

这已经正确设置了自动完成功能并且也适用于环境变量。我不知道这是否是执行此操作的最佳方法,但它可以工作,并且 python 中的任何更改都会在 运行 设置脚本或登录时自动放入完整命令中,如果它在 bashrc.