Python argparse和bash完成

and*_*tti 54 python argparse bash-completion

我想在我的python脚本中也可以在参数中自动完成.

我从来没有真正理解bash_completion是如何工作的(对于参数),但是在我深入了解之后我明白了:

  1. 它使用"完成"将完成函数绑定到命令
  2. 每个完成函数基本上都是参数解析器的副本

第二点尤其不是很好,因为我想让它自动生成.

最好的事情是shell会在每个TAB上向我的程序询问要完成什么,但我的印象是这不能真正起作用,这是正确的吗?

第二个选项可能只是将一个转换器从argparse解析器写入一个正确完成的shell函数.

wea*_*ver 64

无耻的自我推销:https://github.com/kislyuk/argcomplete

argcomplete为argparse提供bash完成.

  • 我也推荐它. (2认同)
  • 是否可以将“completion-script.sh”与包一起分发,以便用户不需要评估任何内容? (2认同)

nea*_*mcb 13

Bash"完成"真的很棒.用Python编写的程序很容易....

我认为这正是你想要的:optcomplete:用于Python的Shell Completion Self-Generator.例如,它可用作Ubuntu中的"python-optcomplete"包.

在python程序中插入几行,用户(一次)运行bash"complete"程序告诉bash如何完成参数:

complete -F _optcomplete <program>
Run Code Online (Sandbox Code Playgroud)

现在用户已经完成了!默认情况下,它可以简单地完成程序选项.请参阅示例,了解如何自定义特定选项的完成方式.它编写精美,易于扩展以处理子命令,备用完成选项等!

更新:

要在zsh中完成(对于optparse和argparse),请参阅genzshcomp 0.3.1:Python包索引

正如@englebip所指出的,我们仍然需要类似于argparsePython 2.7和3.2中引入的新模块,因为optparse现在已经弃用了.

以下是关于朝着这个方向前进的讨论:

另请参见关于如何完成的背景: 在bash中,argparse(以及不推荐使用的optparse)如何在python程序名后响应'tab'按键?- 堆栈溢出

  • 这确实非常酷,但它适用于现在过时的`optparse`模块,而不适用于当前的`argparse`.用`argparse`重新实现的任何想法? (2认同)