0

我正在尝试在 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() 以脚本结尾有关。任何人都知道脚本结束后我怎样才能让它持续存在?

4

1 回答 1

2

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

## 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 中)。

于 2015-09-01T13:51:16.577 回答