Python argparse和bash完成

我想自动完成我的Python脚本也参数。

我从来没有真正理解bash_completion是如何工作的(用于论证),但是在我深入了解之后,我明白了这一点:

  1. 它使用“完成”将完成function绑定到命令
  2. 每个完成函数基本上都是参数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? – 堆栈溢出