我想知道是否可以使用 Click 8 来实现 shell 完成,这可能取决于之前在命令行上指定的命令、选项和参数。然而,我发现
ctx.params
不包括它们。无论如何,请考虑以下示例。
./foo.py --global-opt foo my_command --command-opt <TAB>
我想知道如何根据
--command-opt
的值(回调,即全局选项)来完成 --global-opt
的制表符补全。理想情况下,可以先对 --global-opt
进行常规处理,然后再对 --command-opt
进行 shell 补全。
事实上,一位维护者告诉我这是可能的,但他没有解释如何做到。任何建议或例子将不胜感激。
我认为点击中没有合适的解决方案。 github上有关于此的问题1,2,没有任何回复。
您可以自己实现(部分)命令行解析并使用 click 的完成功能:
def _shell_complete_greeted(ctx, args, incomplete):
comp_words = os.environ['COMP_WORDS'].split('\n') # potentially unsafe...
idx = comp_words.index('--global-opt')
global_opt_val = None
if 0 < idx < len(comp_words):
global_opt_val = comp_words[idx + 1]
# Compute options based on global_opt_val
# ...
return options
当然,您必须手动完成所有解释并检查单击是否适合您。