为argparse提供自动外壳完成支持的包。

argcompd的Python项目详细描述


目的

argcomp包提供自动参数完成支持 对于所有使用argparse的argumentparser类的python程序 他们的参数处理。它通过提供一个替换品 它透明地提供了一个(隐藏的)完整的参数,可以是 调用以自动完成参数。必须做的一切 连接是通过调用 这与贝壳的争论。

基本原理

<>已经存在一些类似的软件包。 功能。然而,每一个都被认为是不够的。

  • optcomplete:顾名思义,optcomplete包仅 使用OptParse模块,该模块已弃用,不应 用于新程序。它也与Python3不兼容, 立即取消资格。
  • python selfcompletion:此包与argparse一起工作,但也 python 3还没准备好。代码结构不是很好,而且 不灵活,因为缺少对自定义完成函数的支持。
  • argcomplete:argcomplete包似乎是python 3 兼容的。但是,为了提供它复制的功能, 粘贴和修改argparse代码以及shlex模块。 这种方法的缺点是需要修复程序的后台端口 给那些包裹。不是说它很难看。上 好的一面是,这个包支持自定义完成器,并且是唯一 可行的选择,但由于代码重复,它被丢弃为 好。

argcomp结合了前面提到的最好的包。它是 完全符合python 3。它与argparse的argumentparser接口 没有重复它的所有代码,也没有窥视任何内部。 最后,它支持自定义完成符以允许上下文 敏感的完成。

用法

要使用argcomp包,用户只需替换 使用提供的argparse'sArgumentParserCompletingArgumentParser类。因为后者完全 与前者兼容,无需额外工作。

--- example.py
+++ example.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python

-from argparse import (
-  ArgumentParser,
+from deso.argcomp import (
+  CompletingArgumentParser as ArgumentParser,
 )

 parser = ArgumentParser(description="Process some integers.")

为了从shell访问完成功能, 需要先登记。通常,这种注册是通过 在shell启动时获取一个准备好的完成文件。样品 完成文件(对bash有效)如下所示:

_complete_example(){localcompletions=$("${1}" --_complete "${COMP_CWORD}""${COMP_WORDS[@]}")if[$? -eq 0];then
    readarray -t COMPREPLY < <(echo -n "${completions}")fi}complete -F _complete_example example.py

在这里,脚本example.py注册为由 新创建的shell函数_complete_example。一旦这个文件 源于一个外壳,可以完成。

完成符

argcomp支持自定义完成符。完成符是一个简单的函数 与要提供的参数一起注册的 完成。这样的函数需要有一个给定的接口并产生 它的完成。除此之外,几乎没有任何限制 一个完成者能用什么来提供完成。

为本地文件和目录提供完整性的示例完成程序 可以这样:

deflocalFileCompleter(parser,values,word):"""A completer for files in the current working directory."""forvalueinlistdir():ifvalue.startswith(word):yieldvalue

注册很简单,并且与参数规范一起发生:

--- cat.py
+++ cat.py
@@ -13,7 +13,7 @@ def localFileCompleter(parser, values, word):

 parser = CompletingArgumentParser(prog="cat")
 parser.add_argument(
-  "files", nargs="+",
+  "files", nargs="+", completer=localFileCompleter,
   help="Files to cat."
 )

注意,完成符不是argparse的argumentparser的一部分。作为 因此,切换回它需要删除completer关键字 参数。

安装

argcomp包除了标准python之外没有其他依赖项 3安装。为了安装它,只需使src/ python通过将其嵌入PYTHONPATH而知道的目录。

如果使用Gentoo Linux,则 ebuild可用 可直接使用。

支架

该模块用python 3进行了测试。没有工作要确保 兼容Python2的可用性。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javascript问题:通过URL用网站数据填充Textview   java TabLayout Android,如何用几个标签填充整个屏幕宽度,并用大量标签滚动?   Eclipse Java运行的文件不再存在于我的工作区中   安装两个Java版本时,使用Java的windows链接不起作用   java将多个图形添加到单个JPanel   java Kafka ConsumerFactory,带有两个Desiarizer   使用反射更改java类超类   当一致性测试失败时,java有没有办法让堆栈跟踪显示在控制台中   java映射到基元类型的HashMap的快速替代方案是什么?   java关闭一个jframe所有剩余的打开jframe都将关闭。   java为什么不推荐“使用getString()获取设备标识符”?   java值比较和值赋值之间有什么性能差异吗?   Java实体数组到JavaScript数组   java使用流将一个列表转换为另一个列表   在JTree中保存对象,但更改显示的名称(java swing)?   java“Hello world”Android应用程序,文件尽可能少,没有IDE,只有文本编辑器   java在方法之间传递值   java如何为项目数组创建ParseQuery?