python argcomplete的缓存包装

cachedcomplete的Python项目详细描述


缓存完成

python argcomplete的缓存包装。在

安装

使用包管理器pip安装cachedcomplete。在

pip install cachedcomplete
activate-global-python-argcomplete

解释

cachedcomplete包装了argcomplete,并允许缓存其解析器 为了节省时间。在

cachedcomplete每次更改自身时都会重新缓存, 或者在用户指定的文件中。在

cachedcomplete使用pickle缓存解析器,这意味着解析器 必须能够使用pickle序列化和反序列化。在

如果没有任何干扰,则无法使用pickle序列化argparse的解析器, 因为默认类型是在解析器的__init__函数中定义的。 cachedcomplete用可以pickle的相同类型替换默认类型 (只有当cachedcomplete检测到默认类型仍然是默认类型时,才会执行此操作 识别功能)。在

使用

正常使用

正常用法与argcomplete中相同,只是将导入从argcomplete更改为cachedcomplete。在

注意:PYTHON_ARGCOMPLETE_OK的用法与argcomplete中的用法相同

例如

使用argcomplete:

^{pr2}$

使用cachedcomplete:

# PYTHON_ARGCOMPLETE_OKimportcachedcomplete# ...cachedcomplete.autocomplete()

CompletionFinder的自定义子类的用法

为了在cachedcomplete中使用自定义CompletionFinders, 需要使用decorator缓存的“完成”查找器。在

例如

使用argcomplete:

importargcompleteclassCustomCompletionFinder(argcomplete.CompletionFinder):# ...completion_finder=CustomCompletionFinder()# Instead of argcomplete.autocomplete()completion_finder()

使用cachedcomplete:

importargcompleteimportcachedcomplete@cachedcomplete.cached_completion_finderclassCustomCompletionFinder(argcomplete.CompletionFinder):# ...completion_finder=CustomCompletionFinder()# Instead of argcomplete.autocomplete()completion_finder()

或:

importargcompleteimportcachedcompleteclassCustomCompletionFinder(argcomplete.CompletionFinder):# ...completion_finder=cachedcomplete.cached_completion_finder(CustomCompletionFinder)()# Instead of argcomplete.autocomplete()completion_finder()

指定要跟踪的文件

为了指定跟踪更改的文件, 使用所需文件和前缀CACHEDCOMPLETE\u HASH添加注释:

# CACHEDCOMPLETE_HASH: file1.py

它还允许将多个文件拆分为多个注释,或在一个注释内拆分。在

# CACHEDCOMPLETE_HASH: file1.py file2.json# CACHEDCOMPLETE_HASH: file3.py# CACHEDCOMPLETE_HASH: "file with spaces.txt"

还允许向上传递一个目录来跟踪其中的所有文件

# CACHEDCOMPLETE_HASH: dir

还允许使用环境变量和用户目录:

# CACHEDCOMPLETE_HASH: $HOME/.cache/my-cache /tmp/${USERNAME}.ini# CACHEDCOMPLETE_HASH: ~/.cache/my-cache ~gdm/greeter-dconf-defaults

路径相对于调用脚本,而不是当前工作目录。在

cachedcomplete添加一个环境变量名pwd,以允许访问当前 注释中的工作目录。如果已经设置了此变量,则not覆盖。在

# CACHEDCOMPLETE_HASH: $pwd/local-file

使用自定义类型、完成符、操作等…

为了缓存使用自定义类型和函数的解析器, 它们必须在主脚本(定义解析器)之外的单独模块中定义。在

注意:建议将这些单独的模块添加到跟踪文件中(如CACHEDCOMPLETE_HASH指定的那样)。

示例:

不起作用:

my_awesome_script.py

# PYTHON_ARGCOMPLETE_OKimportargparseimportcachedcompleteimportjsondefjson_file(arg):withargparse.FileType()(arg)asf:returnjson.load(f)p=argparse.ArgumentParser()p.add_argument('settings',type=json_file)cachedcomplete.autocomplete(p)

将工作:

my_awesome_type.py

importjsondefjson_file(arg):withargparse.FileType()(arg)asf:returnjson.load(f)

my_awesome_script.py

# PYTHON_ARGCOMPLETE_OK# CACHEDCOMPLETE_HASH: my_awesome_type.pyimportargparseimportcachedcompletep=argparse.ArgumentParser()p.add_argument('settings',type=json_file)cachedcomplete.autocomplete(p)

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

推荐PyPI第三方库


热门话题
java Android studio在应用程序中自动添加错误权限   java如何转换“javafx”。场景形象Image@1a3d58b'到正常的文件路径   java这个程序的流程是什么?请启发我的知识   javafx中按钮的java切换组   void方法中使用的void方法的数组组成?(爪哇)   jsp重定向到Liferay Portlet中的Java Servlet   java在创建反转arraylist的方法时遇到问题   使类(包装映射)在Java的forloop中可用   java将TextInputLayout或任何UI组件从活动传递到DialogFragment   java在启动SpringBootApplication时捕获异常   java如何实现像playstore应用程序那样的向下滚动隐藏操作栏?   java如何获得pom文件的完全解析模型?   在Java中将字节数组转换为字符串并返回后得到错误的结果   java数学解析器令牌结构   java是默认的Hibernate(5.2.5)会话级缓存终止性能?