我想在我的python脚本中也可以在参数中自动完成.
我从来没有真正理解bash_completion是如何工作的(对于参数),但是在我深入了解之后我明白了:
第二点尤其不是很好,因为我想让它自动生成.
最好的事情是shell会在每个TAB上向我的程序询问要完成什么,但我的印象是这不能真正起作用,这是正确的吗?
第二个选项可能只是将一个转换器从argparse解析器写入一个正确完成的shell函数.
我的Python程序可以使用一系列不同的选项(或子命令)启动,如:
$ myProgram doSomething
$ myProgram doSomethingElse
$ myProgram nowDoSomethingDifferent
Run Code Online (Sandbox Code Playgroud)
我希望它使用自动完成,这样如果我输入"myProgram d"它返回"myProgram doSomething",如果我输入"myProgram n"它会呈现"myProgram nowDoSomethingDifferent".这与模块rlcompleter的平均使用类似,但它不从文件系统(或从历史记录)中选择可能的完成选项,而是从一组自定义字符串(对应于我的程序的可用选项)中选择
有关如何实现这一点的任何想法?
我知道变量PYTHONSTARTUP(它应该指向一个我不知道如何写的文件).
作为一个工作示例,django-admin(来自django包)具有我正在寻找的相同的功能
我已经测试过optcomplete使用该optparse模块.它的例子是一个简单的文件,所以我可以让它工作.我也使用该argparse模块对其进行了测试,因为之前的模块已被弃用.但我真的不明白python程序是如何以及由谁在tab press上调用的.我怀疑bash与shebang线和argparse(或optparse)模块一起涉及某种方式.我一直试图解决这个问题(现在要阅读源代码).
我有一个更复杂的程序结构,其中包含处理参数的代码片段的包装器.它的argparse.ArgumentParser()实例化和调用add_argument()- 它被超级映射到另一个中间模块以避免重复代码,以及被调用的包装 - 在函数内部.
我想了解这个标签完成在bash和python之间的工作方式(或者就任何其他解释器而言perl).
注意:我对bash完成有一个公平的理解(我刚刚学到了),我想我理解bash(仅)自定义完成.
注意:我已经阅读了其他类似的SO问题,并且没有人真正回答这个问题.
编辑:这是bash函数.
我已经理解了python模块如何通过读取os.environ变量值 来了解在命令行中输入的单词
$COMP_WORDS
$COMP_CWORD
$COMP_LINE
$COMP_POINT
$COMPREPLY
Run Code Online (Sandbox Code Playgroud)
这些变量仅在按Tab键上具有值.我的问题是如何触发python模块?