写Python的经常要写一些命令行工具,虽然标准库提供有命令行解析工具Argparse,但是写起来非常麻烦,我很少会使用它。命令行工具中用起来最爽的就是点击,它是瓶的团队托盘的开源项目.Click只要很少的代码就可以优雅地创造一个命令行工具,它致力于将创建命令行工具的过程变的快速而有趣。
百闻不如一试
pip安装点击
创建click_demo。py,写一个最简单的函数
单击导入 @click.command () def hello (): 点击。回声(“Hello World !”) if __name__==癬_main__”: 你好()
运行:
python click_demo.py Hello World !
装饰器click.command()使函数秒变命令行工具,回声函数的作用等同于打印函数。
装饰器click.option()可以给命令行函数指定参数
单击导入 @click.command () @click。选项(“——”,默认=1,帮助=按蛴〈问?类型=int) def你好(数): ”“” 这是一个简单示例 ”“” 因为我在范围内(数): 点击。回声(“Hello World !”) if __name__==癬_main__”: 你好()
-
<李>——数:统计是参数的名字李>
<李>默认值:参数的默认值李>
<李>类型:给参数指定类型李>
<李>帮助:说明文档李>
执行脚本的时候后面加上参数——帮助就可以查看说明文档。
python click_demo美元。py——帮助 用法:click_demo。py(选项) 这是一个简单示例 选项: ——计数整数打印次数 ——帮助显示此消息并退出。
指定参数:
在python click_demo。py -数3 你好世界! 你好世界! Hello World !
有些命令行工具在运行的时候要求用户输入信息,可以给选择装饰器指定提示参数
单击导入 @click.command () @click。选项(“——”,默认=1,帮助=按蛴〈问?类型=int) @click。选项(“-名字”,提示="请输入名字”,帮助=靶彰? def你好(数、名称): ”“” 这是一个简单示例 ”“” 因为我在范围内(数): 点击。回声(f 'Hello {name} !”) if __name__==癬_main__”: 你好()
python click_demo.py美元 请输入名字:lzjun 你好lzjun !
点击很重要的一个特性就是它的分组功能,当一个命令行工具的逻辑已经非常复杂的时候,为了解耦,我们需要将不同的逻辑放在不同的命令中,这样既可以避免单个命令行工具函数臃肿来。看个例子:
# db.py 单击导入 @click.group () def db (): 通过 @click.command () @click。选项(“-名字”,帮助="用户名”) def添加(名称): ”“” 添加用户 :参数名称: 返回: ”“” 点击。回声(f 'add用户{名称}”) @click.command () @click。选项(“id”,帮助="用户名”) def删除(id): ”“” 删除用户 :param id: 返回: ”“” 点击。回声(f 'delete用户{id}”) db.add_command(删除) db.add_command(添加) if __name__==癬_main__”: db ()
这是一个操作数据库DB的命令行工具,提供了添加用户和删除用户的命令行等其它操作,如果所有的业务逻辑全部写在一个函数、维护变得异常困难。
@click。组装饰器把函数装饰成为一个集团对象,通过组可以添加很多子命令。
python db。py——帮助 用法:db。py[选项]命令(ARGS)…… 选项: ——帮助显示此消息并退出。 命令: 加添加用户:参数名称::返回: 删除删除用户:param id:返回:
从帮助文档中我们看到添加和删除就是两个子命令。瓶框架的烧瓶命令也是一个组命令。