网络编程
位置:首页>> 网络编程>> Python编程>> Python命令行click参数用法解析

Python命令行click参数用法解析

作者:Python探索牛  发布时间:2023-07-30 14:01:20 

标签:Python,命令行,click,参数

这篇文章主要介绍了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

0
投稿

猜你喜欢

  • 一、任务概述26个英文字母识别是一个基于计算机视觉的图像分类任务,旨在从包含26个不同字母图像的数据集中训练一个深度学习模型,以对输入的字母
  • 和以往的总监会议一样,在某个新功能的总监级别讨论会上,很多人再次又说出了同样的看法:“我们网站的界面设计太烂了,不好看、不好用、而且很乱”。
  • 首先,adb实现对设备的reboot命令是:adb reboot . 但是如果是两台/多台设备的时候,需要声明serial number:
  • 相信大家在爬虫中都设置过请求头 user-agent 这个参数吧? 在请求的时候,加入这个参数,就可以一定程度的伪装成浏览器,就不会被服务器
  • 如下所示:import tensorflow as tftfe = tf.contrib.eagertf.enable_eager_exec
  • python实战,用户答题分享给大家。主要包含内容,文件的读取,更改,保存。不同文件夹引入模块。输入,输出操作。随机获取数据操作随机生成算数
  • 大致介绍好久没有写博客了,正好今天有时间把前几天写的利用python定时发送QQ邮件记录一下1、首先利用request库去请求数据,天气预报
  • 注意事项[object] * n 的时候并没有复制n-1个object,而是增加了n-1个对object的引用。例子说明目标:生成一个10*
  • 如果直接在命令行中利用input和raw_input读入一个文件来处理,并且想要采用直接将文件拖入命令行来处理的方式,input方法可以直接
  • 最近学习Python接口测试,对于接口测试完全小白。大概一周的学习成果进行总结。1.接口测试:目前涉及到的只是对简单单一的接口进行参数传递,
  • 有很多应用项目, 刚起步的时候用MYSQL数据库基本上能实现各种功能需求,随着应用用户的增多,数据量的增加,MYSQL渐渐地出现不堪重负的情
  • time 模块主要包含各种提供日期、时间功能的类和函数。该模块既提供了把日期、时间格式化为字符串的功能,也提供了从字符串恢复日期、时间的功能
  • 就前面所讲,函数的基本内容已经完毕。但是,函数还有很多值得不断玩味的细节。这里进行阐述。参数的传递python中函数的参数通过赋值的方式来传
  • Python函数用法和底层分析函数是可重用的程序代码块。函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。一致性指的是,只要修改函数
  • 前言单例模式(Singleton Pattern),是一种软件设计模式,是类只能实例化一个对象,目的是便于外界的访问,节约系统资源,如果希望
  • 一切皆是对象在 Python 一切皆是对象,包括所有类型的常量与变量,整型,布尔型,甚至函数。 参见stackoverflow上的一个问题
  • A 定义数组有两种方式:DIM和REDIM。DIM定义的是固定个数、数据类型的数组;而REDIM则不同,它可以定义不同类型的数据,也可以定义
  • Anaconda简介Anaconda,是一个开源的Python发行版本,其包含了conda、Python以及一大堆安装好的工具包及依赖项,比
  • 五、XML带来的好处 (1)更有意义的搜索 数据可被XML唯一的标识。没有XML,搜索软件必须了解每个数据库是如何构建的。这实际上是不可能的
  • 本篇文章通过调用opencv里的函数简单的实现了对图像里特定颜色提取与定位,以此为基础,我们可以实现对特定颜色物体的前景分割与定位,或者特定
手机版 网络编程 asp之家 www.aspxhome.com