我也想在参数中自动完成我的 python 脚本。
我从来没有真正理解过 bash_completion 是如何工作的(对于参数),但是在我深入研究之后我明白了:
- 它使用“完成”将完成功能绑定到命令
- 每个完成函数基本上都是参数解析器的副本
特别是第二点不是很好,因为我想让它自动生成。
最好的办法是,shell 在每个 TAB 处向我的程序询问要完成什么,但我的印象是这真的行不通,对吗?
第二种选择可能只是编写一个从 argparse 解析器到正确完成的 shell 函数的转换器。
我也想在参数中自动完成我的 python 脚本。
我从来没有真正理解过 bash_completion 是如何工作的(对于参数),但是在我深入研究之后我明白了:
特别是第二点不是很好,因为我想让它自动生成。
最好的办法是,shell 在每个 TAB 处向我的程序询问要完成什么,但我的印象是这真的行不通,对吗?
第二种选择可能只是编写一个从 argparse 解析器到正确完成的 shell 函数的转换器。
无耻的自我推销:https ://github.com/kislyuk/argcomplete
argcomplete 为 argparse 提供 bash 补全。
Bash“完成”真的很棒。并且对于用 Python 编写的程序很容易......
我认为这正是您想要的:optcomplete: Shell Completion Self-Generator for Python。例如,它可以作为 Ubuntu 中的“python-optcomplete”包使用。
您在 python 程序中插入几行,用户(一次)运行 bash “完成”程序来告诉 bash 如何完成参数:
complete -F _optcomplete <program>
现在用户已经完成了!默认情况下,它会简单地完成程序选项。请参阅示例,了解如何自定义完成特定选项的工作方式。它写得很漂亮,并且易于扩展以处理子命令、替代完成选项等!
更新:
要在 zsh 中完成(对于 optparse 和 argparse),请参阅genzshcomp 0.3.1:Python 包索引
正如@englebip 所指出的,我们仍然需要为argparse
Python 2.7 和 3.2 中引入的新模块提供类似的东西,因为optparse
现在已弃用。
以下是关于朝那个方向发展的讨论:
另请参阅有关如何完成的背景: argparse(和不推荐使用的 optparse)如何在 python 程序名称后响应 'tab' keypress,在 bash 中?- 堆栈溢出