Python命令行click参数用法解析
作者:Python探索牛 发布时间:2023-07-30 14:01:20
这篇文章主要介绍了Python命令行click参数用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
一、前言
在概念上, click 把命令行分为 3 个组成:参数、选项和命令。
参数 就是跟在命令后的除选项外的内容,比如 git add a.txt 中的 a.txt 就是表示文件路径的参数
选项 就是以 - 或 -- 开头的参数,比如 -f、--file
命令 就是命令行的初衷了,比如 git 就是命令,而 git add 中的 add 则是 git 的子命令
二、参数
2.1 基本参数
基本参数 就是通过位置里指定参数值。
比如,我们可以指定两个位置参数 x 和 y ,先添加的 x 位于第一个位置,后加入的 y 位于第二个位置。那么在命令行中输入 1 2的时候,分别对应到的就是 x 和 y:
@click.command()
@click.argument('x')
@click.argument('y')
def hello(x, y):
print(x, y)
2.2 参数类型
参数类型 就是将参数值作为什么类型去解析,默认情况下是字符串类型。我们可以通过 type 入参来指定参数类型。
click 支持的参数类型多种多样:
str / click.STRING 表示字符串类型,这也是默认类型
int / click.INT 表示整型
float / click.FLOAT 表示浮点型
bool / click.BOOL 表示布尔型。很棒之处在于,它会识别表示真/假的字符。对于 1、yes、y 和 true 会转化为 True;0、no、n 和 false 会转化为 False
click.UUID 表示 UUID,会自动将参数转换为 uuid.UUID 对象
click.FILE 表示文件,会自动将参数转换为文件对象,并在命令行结束时自动关闭文件
click.PATH 表示路径
click.Choice 表示选择选项
click.IntRange 表示范围选项
同 argparse 一样,click 也支持自定义类型,需要编写 click.ParamType 的子类,并重载 convert 方法。
2.3 文件参数
在基本参数的基础上,通过指定参数类型,我们就能构建出各类参数。
文件参数 是非常常用的一类参数,通过 type=click.File 指定,它能正确处理所有 Python 版本的 unicode 和 字节,使得处理文件十分方便。
@click.command()
@click.argument('input', type=click.File('rb')) # 指定文件为二进制读
@click.argument('output', type=click.File('wb')) # 指定文件为二进制写
def inout(input, output):
while True:
chunk = input.read(1024) # 此时 input 为文件对象,每次读入 1024 字节
if not chunk:
break
output.write(chunk) # 此时 output 为文件对象,写入上步读入的内容
2.4 文件路径参数
文件路径参数 用来处理文件路径,可以对路径做是否存在等检查,通过 type=click.Path 指定。不论文件名是 unicode 还是字节类型,获取到的参数类型都是 unicode 类型。
@click.command()
@click.argument('filename', type=click.Path(exists=True)) # 要求给定路径存在,否则报错
def hello(filename):
click.echo(click.format_filename(filename))
如果文件名是以 - 开头,会被误认为是命令行选项,这个时候需要在参数前加上 -- 和空格,比如
$ python hello.py -- -foo.txt
-foo.txt
2.5 选择项参数
选择项参数 用来限定参数内容,通过 type=click.Choice 指定。
比如,指定文件读取方式限制为 read-only 和 read-write:
@click.command()
@click.argument('mode', type=click.Choice(['read-only', 'read-write']))
def hello(mode):
click.echo(mode)
2.6 可变参数
可变参数 用来定义一个参数可以有多个值,且能通过 nargs 来定义值的个数,取得的参数的变量类型为元组。
若 nargs=N,N为一个数字,则要求该参数提供 N 个值。若 N 为 -1 则接受提供无数量限制的参数,如:
@click.command()
@click.argument('foo', nargs=-1)
@click.argument('bar', nargs=1)
def hello(foo, bar):
pass
如果要实现 argparse 中要求参数数量为 1 个或多个的功能,则指定 nargs=-1 且 required=True 即可:
@click.command()
@click.argument('foo', nargs=-1, required=True)
def hello(foo, bar):
pass
2.7 从环境变量读取参数
通过在 click.argument 中指定 envvar,则可读取指定名称的环境变量作为参数值,比如:
@click.command()
@click.argument('filename', envvar='FILENAME')
def hello(filename):
print(filename)
执行如下命令查看效果:
$ FILENAME=hello.txt python3 hello.py
hello.txt
而在 argparse 中,则需要自己从环境变量中读取。
三、小节
本文讲解了 click 中基本参数的用法,在此基础上介绍了各种类型的参数,最后说明了从环境变量中获取参数值的写法。
来源:https://www.cnblogs.com/djdjdj123/p/11945565.html


猜你喜欢
- 1 背景&概述因某些需求,需要安装 TensorFlow ,很自然地在终端敲下了以下命令:pip install tensorflo
- 写作背景最近本菜鸡有几个网站想要爬,每个爬虫的代码不一样,但 有某种联系,可以抽出一部分通用的代码制成模板,减少代码工作量,于是就有了这篇文
- 实例如下:import sysdef print_all(module_): modulelist = dir(module_)
- 一、ConfigParser简介ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为sectio
- goproxyGo HTTP(S)代理库, 支持中间人代理解密HTTPS项目地址安装go get github.com/ouqiang/go
- 最近在做移动端项目时,需要实现一个列表页面的每一项item向左滑动时出现相应的删除按钮,本来想着直接使用zepto的touch.js插件,因
- 如何做一个自己的QQ?这不是什么新鲜的东西,看看代码:refresh.htm<HTML><HEAD><titl
- event-----------------------------------------------------------------
- 实现多表更新,尤其是A表和A的子表B表数据更新,下面是例子有A、B张表,其记录如下:A表c1
- 分享给大家一篇文章,教你怎样用Python画了一棵圣诞树,快来学习。如何用Python画一个圣诞树呢?最简单:height = 5stars
- github现在已经经常用了,但是经常遇到下面的问题比如:从一个项目A中fork了一个分支B,并且在分支B有了改动。过了几天后,项目A中的代
- 前言大家都知道,Sublime Text 安装插件一般从 Package Control 中直接安装即可,当我安装 node js 插件时候
- I. 前言在上一篇文章深入理解PyTorch中LSTM的输入和输出(从input输入到Linear输出)中,我详细地解释了如何利用PyTor
- 1. echo函数:输出函数,是命令,不能返回值。echo后面可以跟很多个参数,之间用分号隔开,如: echo $myvar1; echo
- 具体不多说,直接上代码。欢迎一起交流和学习。创建一个按月创建表的存储过程,SQL语句如下:DELIMITER // DROP PROCEDU
- 前言不管是哪门语言,千变万化不离其宗,深入理解其本质,方能应用自如。对应到js,闭包,原型,函数,对象等是需要花费大功夫思考、理解的。本文穿
- 数据加载、存储与文件格式pandas提供了一些用于将表格型数据读取为DataFrame对象的函数。其中read_csv和read_talbe
- swagger介绍Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言。Swagger与一组开源软件工具
- 本文实例为大家分享了python3.5绘制随机漫步图的具体代码,供大家参考,具体内容如下代码中我们定义两个模型,一个是RandomWalk.
- 前言飞桨(PaddlePaddle)是集深度学习核心框架、工具组件和服务平台为一体的技术先进、功能完备的开源深度学习平台1. 任务描述乘坐出