当前位置:  开发笔记 > 编程语言 > 正文

使用自定义命令完成行

如何解决《使用自定义命令完成行》经验,为你挑选了4个好方法。

我的Python程序可以使用一系列不同的选项(或子命令)启动,如:

$ myProgram doSomething
$ myProgram doSomethingElse
$ myProgram nowDoSomethingDifferent

我希望它使用自动完成,这样如果我输入"myProgram d"它返回"myProgram doSomething",如果我输入"myProgram n"它会呈现"myProgram nowDoSomethingDifferent".这与模块rlcompleter的平均使用类似,但它不从文件系统(或从历史记录)中选择可能的完成选项,而是从一组自定义字符串(对应于我的程序的可用选项)中选择

有关如何实现这一点的任何想法?

我知道变量PYTHONSTARTUP(它应该指向一个我不知道如何写的文件).

作为一个工作示例,django-admin(来自django包)具有我正在寻找的相同的功能



1> richq..:

创建一个文件"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



2> Peter Hoffma..:

有一个模块optcomplete,它允许你在python程序中编写bash自动完成的完成.这与optparse结合使用非常有用.您只需定义一次参数,将以下内容添加到.bashrc中

complete -F _optcomplete 

并且您的所有选项都将自动完成.


不推荐使用optparse并将其替换为argparse.首选argcomplete:https://github.com/kislyuk/argcomplete

3> Scz..:

正如其他答案中所提到的,在bash中可以使用bash-builtin来完成complete.比编写函数更容易(如在richq的答案中)使用complete的选项-W允许您指定单词列表.在您的示例中,这将是:

complete -W "doSomething doSomethingElse nowDoSomethingDifferent" myProgram

因为它是一个单行程,你不必为此创建一个文件,但你可以把它放在你的.bashrc.



4> Anders Westr..:

如果我理解正确,你需要在python脚本启动之前在命令行上完成行.那么你不应该搜索python解决方案,但看看shell的功能.

如果您正在使用bash,可以查看/ etc/bash_completion,至少在debian/ubuntu上,您应该在/etc/bash_completion.d/中创建一个文件,指定程序的完成.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有