开云-Python 命令行之旅:深入 click 之参数篇

Python 号令行之旅:深切 click 之参数篇 时候:2024-12-13 21:04:36 手机看文章

扫描二维码随时随地手机看文章

1、媒介

在上一篇文章中,我们初步把握了 click的简单用法,并领会到它与 argparse和 docopt的分歧。接下来,将深切介绍 click的各类用法,以让你能轻松打造复杂的号令行法式。

在概念上, click把号令行分为 3 个构成:参数、选项和号令。

参数就是跟在号令后的除选项外的内容,好比 git add a.txt中的 a.txt就是暗示文件路径的参数 选项就是以 -或 --开首的参数,好比 -f、--file 号令就是号令行的初志了,好比 git就是号令,而 git add中的 add则是 git的子号令
本系列文章默许利用 Python 3 作为注释器进行讲授。若你仍在利用 Python 2,请留意二者之间语法和库的利用差别哦~
2、参数 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方式。

官网供给了一个例子,实现了一个整数类型,除通俗整数以外,还接管十六进制和八进制数字, 并将它们转换为常规整数:

class BasedIntParamType(click.ParamType): name = "integer" def convert(self, value, param, ctx): try: if value[:2].lower() == "0x": return int(value[2:], 16) elif value[:1] == "0": return int(value, 8) return int(value, 10) except TypeError: self.fail( "expected string for int() conversion, got " f"{value!r} of type {type(value).__name__}", param, ctx, ) except ValueError: self.fail(f"{value!r} is not a valid integer", param, ctx)BASED_INT = BasedIntParamType()
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.pyhello.txt

而在 argparse中,则需要本身从情况变量中读取。

3、末节

本文讲授了 click中根基参数的用法,在此根本上介绍了各类类型的参数,最后申明了从情况变量中获得参数值的写法。

鄙人一篇文章中,我们来继续深切领会 click的功能,看看它都撑持甚么样的“选项”。

欲知详情,请下载word文档 下载文档

上一篇:开云-strongerHuang 下一篇:开云-边缘AI和智能音频专家XMOS全球首家增值经销商(VAR)落地中国