命令行模块——click(一)

命令行模块——click(一)

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

1.导入

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

2.基本使用

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

    import click
    
    @click.command()
    @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()
    

    @click.command()是使用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个或任意多个参数值。不会对参数个数产生限制,所有传入参数值均被收集。

    @click.command()
    @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!

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值