✨博文作者 wangzirui32
💖 喜欢的可以 点赞 收藏 关注哦~~
👉本文首发于CSDN,未经许可禁止转载
😎 hello,大家好,我是wangzirui32,今天我们来学习click模块开发命令行应用,开始学习吧!
click简介如下(引自官方文档):

安装命令如下:
pip install click
确认安装无误后,即可开始学习。创建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() # 启用组内命令
我们来逐步解析代码:
import click导入click模块group = click.Group()定义了命令组group,它用来存储程序中定义的命令。@click.command("hello")这是一个装饰器,"hello"代表其命令名称。def hello():定义hello函数。click.echo("Hello User ! Welcome !")输出问候消息,这里使用了click.echo输出,据官方文档介绍,这个函数比原来的print更强大,支持更多输出功能,推荐使用。group.add_command(hello)把hello命名添加到命令组里。group.main()启用组内所添加的命令。我们来看看效果:
PS D:\Python> python hello.py hello
Hello User ! Welcome !
看到我们输入了python hello.py hello表示调用hello.py中的hello命名,之后就输出了问候语。
还是刚才的例子,只不过代码有些改动:
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()
效果如下:
PS D:\Python> python hello.py hello --username Malfoy
Hello Malfoy! Welcome!
在上面的例子中,我们加入了参数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()
效果如下:
PS D:\Python>python hello.py hello --email wangzirui32@***.com
Password:
Repeat for confirmation:
Hello wangzirui32! Welcome! Your email is wangzirui32@***.com
Password: 123456
我们来解析其中的3条代码:
@click.option("--username", default="wangzirui32", help="用户名")在这行代码里,我们指定了username的默认参数和它的帮助信息,可以通过--help命令查看。@click.option("--email", prompt="你的邮箱: ", help="邮箱")在这行代码里,我们指定了prompt参数,表示我们如果在命令行里没有指定email,就在程序运行时输出提示语提示输入。@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
这个装饰器还有其他的参数,这里不多说,笔者已将它整理成如下表格:
| 参数名称 | 参数介绍 |
|---|---|
| default | 指定默认值 |
| help | 指定帮助信息 |
| type | 指定参数的数据类型(如str,float) |
| required | 是否为必填选项,True为必填 |
| prompt | 在命令行提示用户输入对应选项的信息 |
| nargs | 指定此命令接收参数的数量,超过会报错 |
先来看看例子,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()
运行效果:
PS D:\Python> python hello.py hello --fruit apple
水果:apple
这里使用了click.Choice传入选项列表,再将其以参数type传入click.option,就完成了,如果输入了不在选项列表里的值,程序会报错。
上面我们介绍了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()
输出:

click.secho可以输出带有颜色的文字,其实这段代码等价于:
click.echo(click.style("Hello!", fg="green"))
click.echo(click.style("你好!", fg="red"))
其效果是一样的。
🎉🎉🎉 好了,今天的课程就到这里,我是wangzirui32,喜欢的可以点个收藏和关注,我们下次再见!