python命令行工具Click快速掌握
前言
写Python的经常要写一些命令行工具,虽然标准库提供有命令行解析工具Argparse,但是写起来非常麻烦,我很少会使用它。命令行工具中用起来最爽的就是Click,它是Flask的团队pallets的开源项目。Click只要很少的代码就可以优雅地创造一个命令行工具,它致力于将创建命令行工具的过程变的快速而有趣。
百闻不如一试
安装
pipinstallClick
使用
创建click_demo.py,写一个最简单的函数
importclick @click.command() defhello(): click.echo('HelloWorld!') if__name__=='__main__': hello()
运行:
pythonclick_demo.py HelloWorld!
装饰器click.command()使函数秒变命令行工具,echo函数的作用等同于print函数。
参数
装饰器click.option()可以给命令行函数指定参数
importclick @click.command() @click.option("--count",default=1,help="打印次数",type=int) defhello(count): """ 这是一个简单示例 """ foriinrange(count): click.echo('HelloWorld!') if__name__=='__main__': hello()
- --count:count是参数的名字
- default:参数的默认值
- type:给参数指定类型
- help:说明文档
执行脚本的时候后面加上参数--help就可以查看说明文档。
$pythonclick_demo.py--help Usage:click_demo.py[OPTIONS] 这是一个简单示例 Options: --countINTEGER打印次数 --helpShowthismessageandexit.
指定参数:
>pythonclick_demo.py--count3 HelloWorld! HelloWorld! HelloWorld!
prompt
有些命令行工具在运行的时候要求用户输入信息,可以给option装饰器指定prompt参数
importclick @click.command() @click.option("--count",default=1,help="打印次数",type=int) @click.option("--name",prompt="请输入名字",help="姓名") defhello(count,name): """ 这是一个简单示例 """ foriinrange(count): click.echo(f'Hello{name}!') if__name__=='__main__': hello()
$pythonclick_demo.py 请输入名字:lzjun Hellolzjun!
Group
Click很重要的一个特性就是它的分组功能,当一个命令行工具的逻辑已经非常复杂的时候,为了解耦,我们需要将不同的逻辑放在不同的命令中,这样既可以避免单个命令行工具函数臃肿。来看个例子:
#db.py importclick @click.group() defdb(): pass @click.command() @click.option("--name",help="用户名") defadd(name): """ 添加用户 :paramname: :return: """ click.echo(f'adduser{name}') @click.command() @click.option("--id",help="用户名") defdelete(id): """ 删除用户 :paramid: :return: """ click.echo(f'deleteuser{id}') db.add_command(delete) db.add_command(add) if__name__=='__main__': db()
这是一个操作数据库DB的命令行工具,提供了添加用户和删除用户的命令行等其它操作,如果所有的业务逻辑全部写在一个函数,维护变得异常困难。
@click.group装饰器把函数装饰成为一个Group对象,通过Group可以添加很多子命令。
pythondb.py--help Usage:db.py[OPTIONS]COMMAND[ARGS]... Options: --helpShowthismessageandexit. Commands: add添加用户:paramname::return: delete删除用户:paramid::return:
从帮助文档中我们看到add和delete就是两个子命令。Flask框架的flask命令也是一个Group命令。
$flask Usage:flask[OPTIONS]COMMAND[ARGS]... AgeneralutilityscriptforFlaskapplications. ProvidescommandsfromFlask,extensions,andtheapplication.Loadsthe applicationdefinedintheFLASK_APPenvironmentvariable,orfroma wsgi.pyfile.SettingtheFLASK_ENVenvironmentvariableto'development' willenabledebugmode. $exportFLASK_APP=hello.py $exportFLASK_ENV=development $flaskrun Options: --versionShowtheflaskversion --helpShowthismessageandexit. Commands: add_user添加账号:paramname::paramusername::parampassword:... init_invite_code添加邀请码 recommend_account更新推荐账号 routesShowtheroutesfortheapp. runRunsadevelopmentserver. shellRunsashellintheappcontext.
提供了几个预定义的子命令和自定义的命令。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。