Python argparse和bash完成
我想自动完成我的Python脚本也参数。
我从来没有真正理解bash_completion是如何工作的(用于论证),但是在我深入了解之后,我明白了这一点:
- 它使用“完成”将完成function绑定到命令
- 每个完成函数基本上都是参数parsing器的副本
第二点尤其不是很好,因为我想自动生成它。
最好的情况是,shell会在每个TAB上向我的程序询问要完成什么,但是我有这样的印象:这不可行,是对的吗?
第二个select可能只是将一个转换器从一个argparseparsing器写到一个正确完成的shell函数中。
无耻的自我推销: https : //github.com/kislyuk/argcomplete
argcomplete为argparse提供了bash完成。
Bash“完成”真的很棒。 并易于使用Python编写的程序….
我认为这正是你想要的: optcomplete:壳牌完成Python的自我生成器 。 它是可用的,例如,作为Ubuntu中的“python-optcomplete”软件包。
你在你的python程序中插入几行,并且用户(一次)运行bash“complete”程序来告诉bash如何完成参数:
complete -F _optcomplete <program>
现在用户已经完成了! 默认情况下,它提供了简单的程序选项完成。 查看示例以了解如何自定义特定选项的完成工作方式。 它写得很漂亮,容易扩展来处理子命令,交替完成选项等等!
更新:
要在zsh中完成(对于optparse和argparse),请参见genzshcomp 0.3.1:Python Package Index
正如@englebip所指出的,我们仍然需要类似于Python 2.7和3.2中引入的新argparse
模块,因为optparse
现在已经被弃用了。
以下是关于朝着这个方向发展的讨论:
- 邮件列表存档:[issue14103] argparse:添加创buildbash_completion脚本的function
- 第55期 – argparse – 为shell自动填充器添加一个实用程序,以及支持扩展完成信息 – Python命令行parsing – Google Project Hosting
另请参阅此背景如何完成: argparse(和不赞成使用的optparse)在Python程序名称之后,在bash中如何响应“tab”键盘button? – 堆栈溢出