pu369com

python 之 click 包,设置命令行参数

原文链接:Python Click 学习笔记

 

Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现。恰好我最近在开发的一个小工具需要在命令行环境下操作,就写个学习笔记。

国际惯例,先来一段 “Hello World” 程序(假定已经安装了 Click 包)。

1
2
3
4
5
6
7
8
9
10
11
12
# hello.py
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):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo('Hello %s!' % name)
if __name__ == '__main__':
    hello()

 执行 python hello.py --count=3,不难猜到控制台的输出结果。

函数秒变 CLI

从上面的 “Hello World” 演示中可以看出,Click 是通过装饰器来把一个函数方法装饰成命令行接口的,这个装饰器方法就是 @click.command()

不同的 Command 实例可以关联到 group 中。group 下绑定的命令就成为了它的子命令,参考下面的代码:

1
2
3
4
5
6
7
8
9
10
11
@click.group()
def cli():
    pass
@click.command()
def initdb():
    click.echo('Initialized the database')
@click.command()
def dropdb():
    click.echo('Dropped the database')
cli.add_command(initdb)
cli.add_command(dropdb)

 @click.group 装饰器把方法装饰为可以拥有多个子命令的 Group 对象。由 Group.add_command() 方法把 Command 对象关联到 Group 对象。


也可以直接用 @Group.command 装饰方法,会自动把方法关联到该 Group 对象下。

1
2
3
4
5
6
7
8
9
@click.group()
def cli():
    pass
@cli.command()
def initdb():
    click.echo('Initialized the database')
@cli.command()
def dropdb():
    click.echo('Dropped the database')

  命令行的参数是不可或缺的,Click 支持对 command 方法添加自定义的参数,由 option() 和 argument() 装饰器实现。

1
2
3
4
5
6
@click.command()
@click.option('--count', default=1, help='number of greetings')
@click.argument('name')
def hello(count, name):
    for x in range(count):
        click.echo('Hello %s!' % name)

  

打包跨平台可执行程序

通过 Click 编写了简单的命令行方法后,还需要把 .py 文件转换成可以在控制台里运行的命令行程序。最简单的办法就是在文件末尾加上如下代码:

1
2
if __name__ == '__main__':
    command()

内容太长了,请看原文吧 

 

 

 

 

 

参考:https://www.cnblogs.com/alexkn/p/6980400.html

https://blog.csdn.net/xiao_yi_xiao/article/details/122041158

posted on   pu369com  阅读(212)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2020-03-23 推荐个屏幕文字识别的软件-汉王屏幕摘抄
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示