快速上手Python命令行模块Click

news2025/7/21 0:15:05

关于Click?

说下 Click 模块是干啥的,简单说,它就是把我们的 Python 脚本的一些函数,通过
添加带有 Click 关键字的装饰器进行装饰进而将函数调用的形式转化为命令行传参的形式然后执行。听不懂也没关系,我们会一步一步来,基本上按照我的实际应用情况来写的。
本文不会涉及太多复杂的语法和理论,将会用通俗的语言和大家进行分享。

安装

一个简单的例子

首先我们创建一个demo.py

装饰器@click.command()会将我们的函数包装成 click 对象,然后我们可以在函数中调用 click 的一些方法,常用的是click.echo,它的作用类似我们的 print,输出用的。

通过命令行我们可以这样运行这行代码

好了,我们的第一个例子完事了,我们发现此时的代码使用不使用 click好像没什么区别。
接下来我们就要对它进行拓展了,如果我们需要传入一个数字,然后打印这个时候,我们的代码就可以这样写了。

传入我们的第一个参数

这里我们前面代码的基础上给函数 main 增加了 @click.option 装饰器。

接下来说下这几个参数的含义
-n:表示我们在命令行指定参数名的时候使用它即可,注意是一个短'-'
--num:是第一个参数的完整名称,我们在程序中接收值的时候使用它。注意是二个短'-'。
help:在命令行输入 "python3 demo.py --help" 的时候,它可以提示我们这个程序有哪些命令可以用。和我们使用命令行一个道理的。
然后我们的函数main的参数名就是,我们要接收的参数的完整名称,同时通过click.echo打印出来。,f"{num=}" 是 Python 3.8 以后的语法糖,如果 num=3 那么它等价于 num = 3。
最后记得在 __main__ 里执行我们的 main 方法。
好了,介绍完了代码,我们可以运行了,运行示例:
首先假设我们不知道它有几个参数。

通过help我们可以得到如下信息

Usage: 对应我们当前文件名

Options: 是一行一个参数,一个参数分为-开头的缩略参数,和--开头的完整参数名。

然后我们后面可以看到它的类型是 TEXT。紧接着就是该参数的提示信息,通过 help 我们可以设置。

或者

上面两者输入方法是等价的使用哪个都行。

现在思考一个问题,如果我们需要 num 的值为数字类型的 3 怎么弄呢?

声明参数类型

这里提供两种方法(当然不仅两种)
方法一:使用 type 关键字,type 就是 python 里的类型

再次执行代码

同时查看 help 信息的时候 TEXT 变为了 INTEGER。

方法二:使用 default 关键字,指定默认值为 1

将 default 的值设置为数字,我们的命令行就知道了我们的参数类型为 int,

这里处理指定了参数类型,还设定了默认值。设定为默认值的参数,可以不指定其值,这时候会使用默认值。

如果我们使用 help 查看信息会发现和上面的方法一没什么区别的。这时候我们可以通过指定另外一个关键字,让它在 help 信息里显示默认值

通过加入 show_default 我们可以让 default 的值在 help 信息中显示了,内容格式如下:

再加一个参数

在上面代码的基础上对代码进行部分修改,主要是新添加一个参数 id。

给之前的函数再添加@click.option装饰器即可。

这里我添加了的参数为 id ,因为一般情况下 id 是不能为空的,所以我们就可以通过required = True对它进行限制,表示该参数为必传参数。如果不传就出现错误

正确的使用方法应该是

到目前为止一个简答的命令行工具就生成了。接下来说下我用它做过什么事情。

处理实际问题

现在我们有个需求,根据用户名去 mongo 数据库中查找对应的用户登录信息,最终的生成信息格式如下:

一开始我是通过在 python 脚本中加个配置文件,然后通过配置文件的形式进行用户名的修改,但是这种方式不灵活,每次都需要重新运行 Python 代码。或者我们还可以使用 fastapi搭建一个RESTful api的服务,但是我的懒得搭这个服务。最终我选择使用命令行的形式去运行。使用的模块就是今天说的这个 click 模块。

接下来写一段需要代码:

通过上面的码我们就可以通过命令行的形式进行查询了。

非常的方便。
如果这个时候,我需要一个临时添加用户的功能,就需要重新写一个函数了,
然后我们在命令行中如何控制两个函数的运行呢?这就是接下来要说的组。

创建组的形式

所谓的创建组,就是通过一个主入口函数,去关联其他的函数,然后其他的函数名可以作为命令直接使用。
好了首先创建一个主入口函数

这个时候我们发现 main 上面的装饰器变为了@click.group()

我们通过它准备创建一个命令行组。接下来我们开始创建组成员,所谓的组成员就是一个函数。

这个组成员的作用和它的函数名是一样的就是查询用户信息。

这里需要注意的是组成员的装饰器由原来的

@click.command变为了@main.command

main 就是上面 main 方法名。然后同样下面的 option 是声明一些参数。

接下来我们创建第二个组成员,用来添加用户信息。

首先通过@main.command()将它加入到组。然后就是 option 一系列添加参数的操作。这个具体的参数信息上面都说了这里就不提了。好了我们就创建这两个成员,
如果需要其他的功能,比如说删除用户,可以继续添加一个 delete_user 函数,以此类推。

下面我就说下如何执行上面的两个成员函数。

首先,先看下它的 help 命令,都有什么内容,一般不知道一个命令行应用有什么命令参数的我时候我们可以使用它。

输出以下内容

其中 Commands 就是我们的成员函数的调用命令,需要注意一下它将函数原来的"_"变为了“-”。

然后我们就可以调用查询方法了

然后我们就可以得到结果

同样的调用添加用户信息的方法。

因为-t不是必传参数所以我们可以忽略,使用默认值"phone"。

好了,这就是今天要说的内容,基本上够日常操作了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【OpenGL开发】VS2017+nuget配置OpenGL开发环境

文章目录1、简介1.1 先决条件1.2 查找并安装包1.3 卸载软件包1.4 更新包1.5 管理解决方案的包1.6 “合并”选项卡2、nuget配置程序源2.1 在线源2.2 本地源3、nuget安装库3.1 nuget安装nupengl.core(C)3.2 nuget安装Giawa.OpenGL(C#&#xff0…

听音乐赚钱App,每天听歌收益5美金,保姆级教学,被动收入人人可做

文章目录调研操作变现链接调研 今天分享的就是一个无门槛挂机项目。不需要科学上网,只要听歌就能赚钱。 首先我们需要先认识平台,这个平台叫做current。 是一个听音乐赚积分的平台,它这个赚钱逻辑也非常简单,在平台听歌就可以获取积分,不过最后是可以用积分兑换美金的。官方的说…

索辰科技在科创板过会:拟募资金额有所下调,上半年亏损4000万元

11月24日,上海证券交易所科创板披露的信息显示,上海索辰信息科技股份有限公司(下称“索辰科技”)获得上市委会议通过。据贝多财经了解,索辰科技于2022年6月29日递交招股书,准备在科创板上市。 据了解&#…

Word处理控件Aspose.Words功能演示:在 Python 中将 Word 文档转换为 PNG、JPEG 或 BMP

MS Word 文件到图像格式的转换让您可以将文档的页面嵌入到您的 Web 或桌面应用程序中。为了在 Python 应用程序中执行此转换,本文介绍了如何使用 Python 将 Word DOCX或DOC文件转换为PNG、JPEG或BMP图像。此外,您将学习如何使用不同的选项控制 Word 到图…

MySQL一致性读实现原理

一致性读实现原理前言MySQL中的事务事务的ACID事务的并发问题事务隔离级别InnoDB并发控制MVCC特性MVCC快照隔离级别与快照REPEATABLE READREAD COMMITTEDUndo回滚段一致性读总结前言 现在,主流关系型数据库产品基本都实现了MVCC的特性,快照在MVCC中起着…

Eureka(注册中心)

1.SpringCloud快速开发入门 1.1 搭建和配置一个服务提供者 我们知道,SpringCloud构建微服务是基于SpringBoot开发的。 1、 创建一个SpringBoot工程(SpringBoot的Web工程),并且添加SpringBoot的相关依赖; 2、 创建服…

Linus 文件处理(二)

目录 一、前言 二、标准 I/O 库 1、fopen 2、fread 3、fwrite 4、fclose 5、 fflush 6、fseek 7、fgetc, getc, and getchar 8、fputc, putc, and putchar 9、fgets and gets 三、文件和目录维护 1、chmod 2、chown 3、unlink, link, and symlink 4、mkdir and…

Anaconda3安装与配置教程(2022.11)

(1)首先前往 Anaconda 官网:Anaconda,下载安装文件: (2)安装时只需要注意设置好安装路径即可,本文安装路径为:D:\Anaconda3,安装好后打开开始菜单能看到如下启…

Java集合框架详解(四)Map接口、HashMap类、LinkedHashMap类

一、Map接口 Map接口的特点: (1)映射键值对的形式(key和value); (2)Map集合中,key是不能重复的,value是可以重复的; (3)…

电脑视频压缩软件哪个好?分享:一款支持上千种视频格式压缩神器

为了追求高清画质,现在的视频文件越来越大了。超大的文件虽然可以给人们带来更好的视觉效果,也给传输和发送带来了很大的麻烦。那有没有一款电脑视频压缩软件解决视频无损压缩问题呢?答案是肯定的! 当前, 视频压缩已经…

自动控制系统实验总结

目录 自动控制系统实验总结 稳定性 稳态精准 动态过程 自动控制系统实验总结 自动控制系统是否能很好地工作,是否能精确地保持被控量按照预定的要求规律变化这取决于被控对象和控制器及各功能元器件的特性参数是否设计得当。 在理想情况下,控制系统的输出量…

DM-微皮恩

DM_VPN 动态多站点,Hub-spoken 总分站点的VPN架构,常用于总分之间的结构。 一、DMVPN的四个组件 1. MGRE 2. NHRP(下一跳地址解析协议) 3. Dynamic Routing Protocl 4. IPsec VPN 二、MGRE 1.配置(多点GRE隧道) interface tunnel 0 #进入隧道接口…

FPGA时序约束(一)基本概念入门及简单语法

文章目录一、建立时间和保持时间是什么?二、时序分析分类三、时钟约束方法3.1 时钟约束3.2 输入延时约束3.3输出延时约束3.4时序例外四、时序约束语法补充文章目前大部分参考明德扬时序约束,只是一个学习总结,侵权删 原文链接:FPG…

【跨境电商】如何创建吸引人的免费送货电子邮件营销

关键词:跨境电商、电子邮件营销、免费送货 除了用于接触新受众的新策略外,电子邮件营销仍然是推动更多电子商务网站转化的最有效选择之一。在大多数情况下,电子邮件用于推销新产品,通知客户有关销售、交易和季节性活动的信息&…

域名服务:域名迁移

摘要:这里记录一下西部数据域名的迁移步骤,迁移的域名为从西部数据一个账号迁移至另一个西数数据账号。域名的实体认证为同一主体,迁移后无需重新备案。此处为一家公立医院。 相关文章 域名服务:西部数据域名迁移阿里云Symantec免…

leetcode337打家劫舍3刷题打卡

337. 打家劫舍 III - 力扣(Leetcode) 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。 除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个…

索引生命周期管理ILM看完不懂你找我

阅读完本文你可以学到什么是索引生命周期管理,各个阶段可以做的操作以及如何使用索引模版使用索引生命周期策略,下面就跟我一起来吧 基础理论篇 索引生命周期管理(ILM)是一种可以让我们随着时间推移自动化的管理索引的一种方式。我…

常见APP攻击方法 以及防御方法介绍(移动安全)

一、常见APP攻击风险以及防御方法介绍 二、APP攻击以及防御方法 案例讲解 1、基于组件攻击 - 应用劫持 用户打开安卓手机上的某一应用,这时,恶意软件侦测到用户的这一动作,如果立即弹出一个与该应用类似的界面,拦截了合法的应用…

logcat日志文件分析

3:显示时间戳日志 adb logcat -v time > d:\文件\log.txt 日志文件分析 输出的日志格式由5部分组成 1:写下日志的时间 2:优先级,日志优先级从低到高分以下几种 v -verbose 最低级别,开发调试中的一些详细信息,仅在开发中使用&#…

动静分离LNMP

目录 安装LNMP 搭建wordpress 搭建WeCenter 根据需求实现动静分离,当客户端访问nginx网站服务时,静态网页nginx本机反馈,动态网页访问PHP,所以需要在nginx服务器中部署论坛后需要拷贝到PHP服务器中。但是如果有NFS或GFS服务器时可…