为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第三方库


热门话题
Android Studio中的Java错误,但不是Eclipse   java如何使用jsp更新数据库中的文件?   jsoup如何在java中从较大的子字符串中提取多个子字符串?   java RestFB:当页面的URI具有页面名称时,无法获取页面帖子   java可以让Maven做我们在ANT构建中正在做的事情。xml   java如何在JasperReports中动态包含来自Servlet的图像?   java在hibernate中用新集更新旧集   从导出为可运行的Java应用程序创建、解析和管理XML文件。jar文件   在Java中使用数组的基础知识   调试从JAVA程序调用的MATLAB函数   java实现了Iterable hands错误大小的备份   JAVA木卫一。FileNotFoundException:请求的资源不可用   java Android Spring 1.0.1使用基本身份验证删除   java如何使用com解析和对象在一个数字数组中的值。fasterxml。杰克逊。数据绑定。对象映射器   比较两个字符串时发生java NullPointerException