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.
提供了几个预定义的子命令和自定义的命令。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。