• 【Python】click模块开发命令行应用


    ✨博文作者 wangzirui32
    💖 喜欢的可以 点赞 收藏 关注哦~~
    👉本文首发于CSDN,未经许可禁止转载


    😎 hello,大家好,我是wangzirui32,今天我们来学习click模块开发命令行应用,开始学习吧!

    1. click

    click简介如下(引自官方文档):
    click
    安装命令如下:

    pip install click
    
    • 1

    2. Hello World 第一个示例

    确认安装无误后,即可开始学习。创建hello.py,写入代码:

    import click
    
    # 命令组
    group = click.Group()
    
    # 定义hello命令
    @click.command("hello")
    def hello():
        click.echo("Hello User ! Welcome !")
    
    # 添加hello命令
    group.add_command(hello)
    
    group.main()  # 启用组内命令
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    我们来逐步解析代码:

    1. import click导入click模块
    2. group = click.Group()定义了命令组group,它用来存储程序中定义的命令。
    3. @click.command("hello")这是一个装饰器,"hello"代表其命令名称。
    4. def hello():定义hello函数。
    5. click.echo("Hello User ! Welcome !")输出问候消息,这里使用了click.echo输出,据官方文档介绍,这个函数比原来的print更强大,支持更多输出功能,推荐使用。
    6. group.add_command(hello)hello命名添加到命令组里。
    7. group.main()启用组内所添加的命令。

    我们来看看效果:

    PS D:\Python> python hello.py hello
    Hello User ! Welcome !
    
    • 1
    • 2

    看到我们输入了python hello.py hello表示调用hello.py中的hello命名,之后就输出了问候语。

    3. click.option装饰器

    还是刚才的例子,只不过代码有些改动:

    import click
    
    group = click.Group()
    
    @click.command("hello")
    @click.option("--username")  # 加入参数username
    def hello(username):   # 函数参数加入username
    	# 输出对username的问候语
        click.echo("Hello {}! Welcome!".format(username))
    
    group.add_command(hello)
    
    if __name__ == '__main__':
        group.main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    效果如下:

    PS D:\Python> python hello.py hello --username Malfoy 
    Hello Malfoy! Welcome!
    
    • 1
    • 2

    在上面的例子中,我们加入了参数username,来看看关键的这一行代码@click.option("--username"),它表示为命令添加一个名为username的参数,其在命令行中指定方式为--username
    当然,这个装饰器还有其他的参数,我们接着看下面的例子:

    import click
    
    group = click.Group()
    
    @click.command("hello")
    @click.option("--username", default="wangzirui32", help="用户名")
    @click.option("--email", prompt="你的邮箱: ", help="邮箱")
    @click.option('--password', prompt=True,
                hide_input=True, confirmation_prompt=True, help="密码")
    def hello(username, email, password):
        click.echo("Hello {}! Welcome! Your email is {}".format(username, email))
        click.echo("Password: {}".format(password))
    
    group.add_command(hello)
    
    if __name__ == '__main__':
        group.main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    效果如下:

    PS D:\Python>python hello.py hello --email wangzirui32@***.com  
    Password: 
    Repeat for confirmation:
    Hello wangzirui32! Welcome! Your email is wangzirui32@***.com
    Password: 123456
    
    • 1
    • 2
    • 3
    • 4
    • 5

    我们来解析其中的3条代码:

    1. @click.option("--username", default="wangzirui32", help="用户名")在这行代码里,我们指定了username的默认参数和它的帮助信息,可以通过--help命令查看。
    2. @click.option("--email", prompt="你的邮箱: ", help="邮箱")在这行代码里,我们指定了prompt参数,表示我们如果在命令行里没有指定email,就在程序运行时输出提示语提示输入。
    3. @click.option('--password', prompt=True,hide_input=True, confirmation_prompt=True, help="密码")这行代码指定了密码参数,prompt=True允许程序运行时输出提示语提示输入,hide_input隐藏输入,confirmation_prompt=True要求校验之前输入的密码,最后指定帮助信息,其实等价于代码click.password_option()
      这里插一句,帮助信息可谓是click中的一大亮点,访问帮助可以使用--help,示例如下:
    PS D:\Python> python hello.py hello --help
    Usage: hello.py hello [OPTIONS]
    
    Options:
      --username TEXT  用户名
      --email TEXT     邮箱
      --password TEXT  密码
      --help           Show this message and exit.
    PS D:\Python> python hello.py --help      
    Usage: hello.py [OPTIONS] COMMAND [ARGS]...
    
    Options:
      --help  Show this message and exit.
    
    Commands:
      hello
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    这个装饰器还有其他的参数,这里不多说,笔者已将它整理成如下表格:

    参数名称参数介绍
    default指定默认值
    help指定帮助信息
    type指定参数的数据类型(如str,float)
    required是否为必填选项,True为必填
    prompt在命令行提示用户输入对应选项的信息
    nargs指定此命令接收参数的数量,超过会报错

    4. click.Choice 选择参数

    先来看看例子,Code:

    import click
    
    group = click.Group()
    
    @click.command("hello")
    @click.option("--fruit", type=click.Choice(['apple', 'orange', 'grapes']))   # 定义为选择参数
    def hello(fruit):
        click.echo("水果:{}".format(fruit))
    
    group.add_command(hello)
    
    if __name__ == '__main__':
        group.main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行效果:

    PS D:\Python> python hello.py hello --fruit apple     
    水果:apple
    
    • 1
    • 2

    这里使用了click.Choice传入选项列表,再将其以参数type传入click.option,就完成了,如果输入了不在选项列表里的值,程序会报错。

    5. click.secho 输出

    上面我们介绍了click.echo的输出方式,但在click里还有另一种输出函数click.secho,来看代码:

    import click
    
    group = click.Group()
    
    @click.command("hello")
    def hello():
        click.secho("Hello!", fg="green")
        click.secho("你好!", fg="red")
    
    group.add_command(hello)
    
    if __name__ == '__main__':
        group.main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    输出:
    输出
    click.secho可以输出带有颜色的文字,其实这段代码等价于:

    click.echo(click.style("Hello!", fg="green"))
    click.echo(click.style("你好!", fg="red"))
    
    • 1
    • 2

    其效果是一样的。


    🎉🎉🎉 好了,今天的课程就到这里,我是wangzirui32,喜欢的可以点个收藏和关注,我们下次再见!

  • 相关阅读:
    SpringBoot使用RestTemplate远程调用其他服务接口
    【第六周】组合数据类型
    UE4 给模型设置碰撞避坑
    北大青鸟计算机学校好就业吗?
    养发神器:重复代码一键生成,从此远离加班,告别秃头!
    BSN六周年:迈向下一代互联网
    CUDA与cuDNN安装教程(超详细)
    关于前后端分离的项目打包方案docker
    Ansible 常用命令50条
    【WLAN】Android 13 WIFI 选网机制--NetworkNominator 解读
  • 原文地址:https://blog.csdn.net/wangzirui32/article/details/125527227