失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 命令行模块——click(一)

命令行模块——click(一)

时间:2024-07-29 08:52:40

相关推荐

命令行模块——click(一)

命令行模块——click(一)

今天要重点介绍我们的新朋友click!!!!!关于这块知识做一个详细的梳理,以备今后使用。开始喽!

1.导入

click模块是Python的一个第三方库,用于创建命令行界面(CLI)的第三方库。它旨在让开发者能够轻松编写可读性强、易于理解和易于维护的命令行应用程序。使用前需要安装click包,安装命令:pip install clickconda install click导入模块:import click

2.基本使用

使用@mand()@click.option()装饰器定义命令参数

import click@mand()@click.option('--count', default=1, help='Number of greetings.')@click.option('--name', prompt='Your name', help='The person to greet.')def hello(count, name):for x in range(count):click.echo(f'Hello {name}!')if __name__ == '__main__':hello()

@mand()是使用Click构建命令行程序的第一步。通过这个装饰器,我们可以轻松将一个Python函数定义为一个命令行命令,并加以丰富与扩展。使用@click.option定义所需的参数,'--count''--name''--count'默认为1,第二个参数中的prompt表示:命令行中没有包含--name选项时,会提示用户输入Your name作为选项值。如果这些代码写在demo.py文件,在命令行输入:

python demo.py --count 3

因为–name没有指定值会有出现Your name:这样的提示,输入:Zhangsan

输出为:

Hello Zhangsan!

Hello Zhangsan!

Hello Zhangsan!

还有一点需要说明一下:

@click.option("--backbone_names", "-b", type=str, multiple=True, default=[])@click.option("--layers_to_extract_from", "-le", type=str, multiple=True, default=[])

缩写的情况,在命令窗中输入"–backbone_names"或 “-b"都是一样的,”–layers_to_extract_from"或"-le"也同理。

click支持的类型

-str - 字符串,默认类型

- int - 整数,使用 type=click.INT

- float - 浮点数,使用 type=click.FLOAT

- bool - 布尔,使用 is_flag=True

- uuid - UUID,使用 type=click.UUID

- datetime - 日期时间,使用 type=click.DateTime

- file - 文件,使用 type=click.File(‘r’) 等

- path - 路径,使用 type=click.Path()

- choice - 选项,使用 type=click.Choice([‘a’, ‘b’])

- tuple - 元组,使用 multiple=True

- list - 列表,使用 multiple=True

click多参数值

多参数值是指同一个参数可定义多个参数值,其实现方式有两种:

(1)设置multiple = True

@click.option("--backbone_names", "-b", type=str, multiple=True, default=[])@click.option("--layers_to_extract_from", "-le", type=str, multiple=True, default=[])

以上代码是在命令窗中一个需要输入主干网络用"–backbone_names"或"-b"指代,一个需要输入提取的层数用"–layers_to_extract_from"或"-le"指代,默认都是空列表。multiple=True说明可以输入多个参数值。如果以上代码写在demo.py文件中,则在命令窗输入:python demo.py -b resnet50 resnet101 -le conv1 conv2,所以backbone_names选项的值为['resnet50', 'resnet101']layers_to_extract_from选项的值为['conv1', 'conv2']

(2)设置nargs

nargs=1时,选项期望接收一个参数值,如果传入0个或多个参数值,会提醒我们参数个数不匹配的错误信息;nargs=N(整数):必须传入N个参数,否则错误;当nargs=-1时,选项可以接收0个、1个或任意多个参数值。不会对参数个数产生限制,所有传入参数值均被收集。

@mand()@click.argument("names", nargs=-1)def say_hello(names):if not names:click.echo("Hello, Anonymous!")else:for name in names:click.echo(f"Hello, {name}!")if __name__ == "__main__":say_hello()

如果以上代码写在demo.py文件中,命令窗输入:python demo.py zhangsan lisi,则输出为:

Hello, zhangsan!

Hello, lisi!

以上是一些比较普通的用法,还有很多很多细节的东西,还有很多东西没有讲,大家可以根据需要查询。

如果觉得《命令行模块——click(一)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。