argcomplete,一个超酷 Python 库!
前言
大家好,今天为大家分享一个超酷的 Python 库 - argcomplete。
Github地址:https://github.com/kislyuk/argcomplete
命令行工具是开发者和系统管理员的得力助手,但随着命令行选项的增多,用户可能会感到困惑。Python 中的 argcomplete 库可以帮助轻松地为命令行工具添加自动补全功能,提高用户体验。本文将介绍如何使用 Python argcomplete 库实现命令行自动补全,并提供详细的示例代码和用法说明。
目录
编辑
前言
什么是 Python argcomplete?
安装 Python argcomplete
示例:使用 argparse 实现自动补全
示例:使用 click 实现自动补全
使用 Python argcomplete 进行高级配置
1. 自定义参数提示
2. 忽略特定选项
3. 使用自定义自动补全函数
总结
什么是 Python argcomplete?
Python argcomplete 是一个用于自动补全命令行选项和参数的库,它可以与 argparse 或 click 等常见的命令行解析库一起使用。argcomplete 能够帮助命令行工具自动生成选项和参数的提示,用户只需按下 Tab 键就能看到可用的选项和参数,大大提高了命令行工具的易用性。
安装 Python argcomplete
要开始使用 Python argcomplete,首先需要安装它。
可以使用 pip 包管理器来安装 Python argcomplete:
pip install argcomplete
安装完成后,需要在命令行工具脚本中导入 argcomplete,并启用自动补全功能。
示例:使用 argparse 实现自动补全
首先,将演示如何在一个使用 argparse 的命令行工具中启用自动补全。假设有一个脚本 mycli.py
,用于执行某些操作,它接受 --verbose
和 --output
两个选项。想要为这个脚本添加自动补全功能。
import argparsedef main():parser = argparse.ArgumentParser(description='My Command Line Tool')parser.add_argument('--verbose', help='Enable verbose mode', action='store_true')parser.add_argument('--output', help='Specify output file')args = parser.parse_args()if args.verbose:print('Verbose mode enabled')if args.output:print(f'Output file: {args.output}')if __name__ == '__main__':main()
要为这个脚本启用自动补全功能,可以在脚本中添加以下代码:
import argparse
import argcompletedef main():parser = argparse.ArgumentParser(description='My Command Line Tool')parser.add_argument('--verbose', help='Enable verbose mode', action='store_true')parser.add_argument('--output', help='Specify output file')argcomplete.autocomplete(parser)args = parser.parse_args()if args.verbose:print('Verbose mode enabled')if args.output:print(f'Output file: {args.output}')if __name__ == '__main__':main()
在上述代码中,首先导入 argcomplete 库,然后在 argcomplete.autocomplete(parser)
中启用自动补全功能。这将自动生成选项和参数的提示,使用户能够更轻松地使用命令行工具。
示例:使用 click 实现自动补全
除了 argparse,argcomplete 也可以与 click 命令行解析库一起使用。下面是一个使用 click 的命令行工具,并添加了自动补全功能的示例。
首先,需要安装 click 库:
pip install click
然后,创建一个名为 mycli.py
的脚本,包含以下代码:
import click@click.command()
@click.option('--verbose', is_flag=True, help='Enable verbose mode')
@click.option('--output', help='Specify output file')
def main(verbose, output):if verbose:click.echo('Verbose mode enabled')if output:click.echo(f'Output file: {output}')if __name__ == '__main__':main()
接下来,在脚本中添加 argcomplete 的代码以启用自动补全功能:
import click
import argcomplete@click.command()
@click.option('--verbose', is_flag=True, help='Enable verbose mode')
@click.option('--output', help='Specify output file')
def main(verbose, output):if verbose:click.echo('Verbose mode enabled')if output:click.echo(f'Output file: {output}')if __name__ == '__main__':argcomplete.autocomplete(main)
现在,命令行工具将具有自动补全功能,用户只需按下 Tab 键就能看到可用的选项和参数。
使用 Python argcomplete 进行高级配置
当使用Python的argcomplete库进行命令行自动补全时,可以进行高级配置以满足不同的需求。这包括自定义参数提示、忽略特定选项等。以下是一些常见的高级配置示例:
1. 自定义参数提示
可以为每个选项和参数定义自定义的提示信息,以便用户更好地理解它们的含义。使用 argcomplete
库的 argcomplete.completers
模块可以轻松实现这一点。
例如,可以为 --output
选项定义一个自定义提示信息:
import argparse
import argcomplete
from argcomplete.completers import FilesCompleterdef main():parser = argparse.ArgumentParser(description='My Command Line Tool')parser.add_argument('--verbose', help='Enable verbose mode', action='store_true')parser.add_argument('--output', help='Specify output file', metavar='FILE')argcomplete.autocomplete(parser)args = parser.parse_args()if args.verbose:print('Verbose mode enabled')if args.output:print(f'Output file: {args.output}')if __name__ == '__main__':main()
在上述示例中,使用 metavar
参数来为 --output
选项定义了自定义提示信息,以便用户知道它需要输入一个文件名。
2. 忽略特定选项
有时候,可能希望在特定情况下禁用自动补全功能,或者不希望某些选项或参数被自动补全。可以使用 argcomplete
的 argcomplete.exclusive
模块来实现这一点。
以下是一个示例,其中禁用了 --output
选项的自动补全:
import argparse
import argcomplete
from argcomplete.completers import FilesCompleter
from argcomplete.exclusive import mutually_exclusivedef main():parser = argparse.ArgumentParser(description='My Command Line Tool')parser.add_argument('--verbose', help='Enable verbose mode', action='store_true')parser.add_argument('--output', help='Specify output file', metavar='FILE')parser.add_argument('--input', help='Specify input file', metavar='FILE')mutually_exclusive(parser, ['--output', '--input']) # 禁用--output和--input同时使用时的自动补全argcomplete.autocomplete(parser)args = parser.parse_args()if args.verbose:print('Verbose mode enabled')if args.output:print(f'Output file: {args.output}')if args.input:print(f'Input file: {args.input}')if __name__ == '__main__':main()
在上述示例中,使用 mutually_exclusive
函数来禁用了 --output
和 --input
选项同时使用时的自动补全。这样用户就不能同时为这两个选项输入值。
3. 使用自定义自动补全函数
如果需要更高级的自动补全行为,可以定义自己的自动补全函数。这在处理复杂的参数或根据上下文动态生成提示时非常有用。
以下是一个示例,其中定义了一个自定义的自动补全函数来为 --output
选项提供文件名提示:
import argparse
import argcompletedef custom_completer(prefix, **kwargs):# 在此自定义自动补全逻辑,返回一个包含建议值的列表suggestions = ['file1.txt', 'file2.txt', 'file3.txt']return [s for s in suggestions if s.startswith(prefix)]def main():parser = argparse.ArgumentParser(description='My Command Line Tool')parser.add_argument('--verbose', help='Enable verbose mode', action='store_true')parser.add_argument('--output', help='Specify output file', metavar='FILE')argcomplete.autocomplete(parser, custom_completer=custom_completer)args = parser.parse_args()if args.verbose:print('Verbose mode enabled')if args.output:print(f'Output file: {args.output}')if __name__ == '__main__':main()
在上述示例中,定义了一个名为 custom_completer
的自定义自动补全函数,它返回一个包含建议值的列表。然后,通过 argcomplete.autocomplete
函数将自动补全函数应用于 --output
选项。
总结
Python argcomplete 是一个强大的命令行自动补全库,它可以轻松为命令行工具添加自动补全功能,提高用户体验。本文介绍了如何使用 argcomplete 来实现自动补全,并提供了使用 argparse 和 click 的示例。希望本文能够帮助大家更好地了解和利用 Python argcomplete 库。
相关文章:

argcomplete,一个超酷 Python 库!
前言 大家好,今天为大家分享一个超酷的 Python 库 - argcomplete。 Github地址:https://github.com/kislyuk/argcomplete 命令行工具是开发者和系统管理员的得力助手,但随着命令行选项的增多,用户可能会感到困惑。Python 中的 a…...

<设计模式>单例模式懒汉和饿汉
目录 一、单例模式概述 二、懒汉模式和饿汉模式 1.饿汉模式 1.1代码实现 1.2实现细节 1.3模式优劣 2.懒汉模式 2.1代码实现 2.2实现细节 2.3模式优劣 三、多线程下的线程安全问题 1.懒汉和饿汉线程安全问题分析 1.1安全的饿汉模式 1.2不安全的懒汉模式 2.懒汉线程…...

二分查找------蓝桥杯
题目描述: 请实现无重复数字的升序数组的二分查找 给定一个元素升序的、无重复数字的整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的target,如果目标值存在返回下标 (下标从0 开始),否则返回-1 数据范围: 0 < l…...

今日arXiv最热NLP大模型论文:微软提出SliceGPT,删除25%模型参数,性能几乎无损
引言:探索大型语言模型的高效压缩方法 随着大型语言模型(LLMs)在自然语言处理领域的广泛应用,它们对计算和内存资源的巨大需求成为了一个不容忽视的问题。为了缓解这些资源限制,研究者们提出了多种模型压缩方法&#…...
ChatGPT实战100例 - (13) 写一个属于自己的 ChatGPT 新版 WebUI
文章目录 ChatGPT实战100例 - (13) 写一个属于自己的 ChatGPT 新版 WebUI一、ChatGPT(OpenAI)的新版API调用1.1 环境变量配置与调用1.2 新版api调用1.3 命令行流式输出二、Gradio制作自己的聊天WebUI2.1 流式WebUI2.2 样式调整三、总结参考ChatGPT实战100例 - (13) 写一个属于自…...

【计算机学院寒假社会实践】——服务走进社区,共绘幸福蓝图
为深入贯彻落实志愿者服务精神,扎实推进志愿者服务质量,2024年1月28日,曲阜师范大学计算机学院“青年扎根基层,服务走进社区”社会实践队队员周兴睿在孙宇老师的指导下,来到山东省滨州市陈集街道社区开展了为期一天的“…...

[python] 过年燃放烟花
目录 新年祝福语 一、作品展示 二、作品所用资源 三、代码与资源说明 四、代码库 五、完整代码 六、总结 新年祝福语 岁月总是悄然流转,让人感叹时间的飞逝,转眼间又快到了中国传统的新年(龙年)。 回首过去…...

数据结构与算法:图论(邻接表板子+BFS宽搜、DFS深搜+拓扑排序板子+最小生成树MST的Prim算法、Kruskal算法、Dijkstra算法)
前言 图的难点主要在于图的表达形式非常多,即数据结构实现的形式很多。算法本身不是很难理解。所以建议精通一种数据结构后遇到相关题写个转换数据结构的接口,再套自己的板子。 邻接表板子(图的定义和生成) public class Graph…...

Python之PySpark简单应用
文章目录 一、介绍1.准备工作2. 创建SparkSession对象:3. 读取数据:4. 数据处理与分析:5. 停止SparkSession: 二、示例1.读取解析csv数据2.解析计算序列数据map\flatmap 三、问题总结1.代码问题2.配置问题 一、介绍 PySpark是Apa…...
降维(Dimensionality Reduction)
一、动机一:数据压缩 这节我将开始谈论第二种类型的无监督学习问题,称为降维。有几个原因使我们可能想要做降维,其一是数据压缩,它不仅允许我们压缩数据使用较少的计算机内存或磁盘空间,而且它可以加快我们的学习算法。…...
web应用(网页)怎样调用浏览器插件(如metamask小狐狸钱包)
下边是与gpt的对话,代码可以在浏览器控制台验证 一,在网页上点击一个连接按钮 然后小狐狸钱包就打开了,是怎么实现的呢 当你在网页上点击一个连接按钮,然后自动打开MetaMask(通常被称为“小狐狸钱包”,一种…...

2024美赛数学建模C题完整论文教学(含十几个处理后数据表格及python代码)
大家好呀,从发布赛题一直到现在,总算完成了数学建模美赛本次C题目Momentum in Tennis完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 C论文共49页&…...

Matplotlib绘制炫酷柱状图的艺术与技巧【第60篇—python:Matplotlib绘制柱状图】
文章目录 Matplotlib绘制炫酷柱状图的艺术与技巧1. 簇状柱状图2. 堆积柱状图3. 横向柱状图4. 百分比柱状图5. 3D柱状图6. 堆积横向柱状图7. 多系列百分比柱状图8. 3D堆积柱状图9. 带有误差线的柱状图10. 分组百分比柱状图11. 水平堆积柱状图12. 多面板柱状图13. 自定义颜色和样…...
window 挂载linux 网盘
背景:因为很多情况下,作为开发人员,我们都希望用Linux的编译环境,但是可以用windows下各种IDE来写code; linux 服务器安装NFS服务 说明:NFS 服务就是让不同的计算机可以在不同的操作系统之间共享文件,采用的就是服务端/客户端的架构,在NFS服务器上将目录设置为输出目录(…...

windows10忘记密码的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

进程和线程的区别详解
🎥 个人主页:Dikz12📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 进程 进程在系统中是如何管理的 进一步认识PCB 线程 能否一直增加线程数目来提高效率 进程和线程…...

(基于xml配置Aop)学习Spring的第十五天
一 . Spring Aop编程简介 再详细点 , 如下 二 . 基于xml配置Aop 解决proxy相关问题 解决问题开始用xml配置AOP 导入pom坐标 <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.6</vers…...
Centos7环境安装PHP8
一、安装必要的模块 yum install -y bzip2-devel libcurl-devel libxml2-devel sqlite-devel oniguruma oniguruma-devel libxml2 libxml2-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel zstd libzstd-devel curl libcurl-devel libpng libpng-devel …...

No matching client found for package name ‘com.unity3d.player‘
2024年2月5日更新 必须使用Unity方式接入Unity项目!一句话解决所有问题。(真的别玩Android方式) 大致这问题出现原因是我在Unity采用了Android方式接入Firebase,而Android接入实际上和Unity接入方式有配置上的不一样,我…...

JavaWeb之HTML-CSS --黑马笔记
什么是HTML ? 标记语言:由标签构成的语言。 注意:HTML标签都是预定义好的,HTML代码直接在浏览器中运行,HTML标签由浏览器解析。 什么是CSS ? 开发工具 VS Code --安装文档和安装包都在网盘中 链接:https://p…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...