我的Python程序可以使用一系列不同的选项(或子命令)启动,如:
$ myProgram doSomething $ myProgram doSomethingElse $ myProgram nowDoSomethingDifferent
我希望它使用自动完成,这样如果我输入"myProgram d"它返回"myProgram doSomething",如果我输入"myProgram n"它会呈现"myProgram nowDoSomethingDifferent".这与模块rlcompleter的平均使用类似,但它不从文件系统(或从历史记录)中选择可能的完成选项,而是从一组自定义字符串(对应于我的程序的可用选项)中选择
有关如何实现这一点的任何想法?
我知道变量PYTHONSTARTUP(它应该指向一个我不知道如何写的文件).
作为一个工作示例,django-admin(来自django包)具有我正在寻找的相同的功能
创建一个文件"myprog-completion.bash"并将其源于.bashrc文件中.这样的事情让你开始......
_myProgram() { cur=${COMP_WORDS[COMP_CWORD]} case "${cur}" in d*) use="doSomething" ;; n*) use="nowDoSomethingElse" ;; esac COMPREPLY=( $( compgen -W "$use" -- $cur ) ) } complete -o default -o nospace -F _myProgram myProgram
有一个模块optcomplete,它允许你在python程序中编写bash自动完成的完成.这与optparse结合使用非常有用.您只需定义一次参数,将以下内容添加到.bashrc中
complete -F _optcomplete
并且您的所有选项都将自动完成.
正如其他答案中所提到的,在bash中可以使用bash-builtin来完成complete
.比编写函数更容易(如在richq的答案中)使用complete
的选项-W
允许您指定单词列表.在您的示例中,这将是:
complete -W "doSomething doSomethingElse nowDoSomethingDifferent" myProgram
因为它是一个单行程,你不必为此创建一个文件,但你可以把它放在你的.bashrc
.
如果我理解正确,你需要在python脚本启动之前在命令行上完成行.那么你不应该搜索python解决方案,但看看shell的功能.
如果您正在使用bash,可以查看/ etc/bash_completion,至少在debian/ubuntu上,您应该在/etc/bash_completion.d/中创建一个文件,指定程序的完成.