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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2020-03-23 推荐个屏幕文字识别的软件-汉王屏幕摘抄