python命令行工具Click快速掌握
作者:FOOFISH-PYTHON之禅 发布时间:2021-08-13 08:03:58
前言
写 Python 的经常要写一些命令行工具,虽然标准库提供有命令行解析工具 Argparse,但是写起来非常麻烦,我很少会使用它。命令行工具中用起来最爽的就是 Click,它是 Flask 的团队 pallets 的开源项目。Click 只要很少的代码就可以优雅地创造一个命令行工具,它致力于将创建命令行工具的过程变的快速而有趣。
百闻不如一试
安装
pip install Click
使用
创建 click_demo.py ,写一个最简单的函数
import click
@click.command()
def hello():
click.echo('Hello World!')
if __name__ == '__main__':
hello()
运行:
python click_demo.py
Hello World!
装饰器 click.command() 使函数秒变命令行工具,echo 函数的作用等同于 print 函数。
参数
装饰器 click.option()可以给命令行函数指定参数
import click
@click.command()
@click.option("--count", default=1, help="打印次数", type=int)
def hello(count):
"""
这是一个简单示例
"""
for i in range(count):
click.echo('Hello World!')
if __name__ == '__main__':
hello()
--count:count是参数的名字
default : 参数的默认值
type:给参数指定类型
help: 说明文档
执行脚本的时候后面加上参数 --help 就可以查看说明文档。
$ python click_demo.py --help
Usage: click_demo.py [OPTIONS]
这是一个简单示例
Options:
--count INTEGER 打印次数
--help Show this message and exit.
指定参数:
>python click_demo.py --count 3
Hello World!
Hello World!
Hello World!
prompt
有些命令行工具在运行的时候要求用户输入信息,可以给 option 装饰器指定 prompt 参数
import click
@click.command()
@click.option("--count", default=1, help="打印次数", type=int)
@click.option("--name", prompt="请输入名字", help="姓名")
def hello(count, name):
"""
这是一个简单示例
"""
for i in range(count):
click.echo(f'Hello {name}!')
if __name__ == '__main__':
hello()
$ python click_demo.py
请输入名字: lzjun
Hello lzjun!
Group
Click 很重要的一个特性就是它的分组功能,当一个命令行工具的逻辑已经非常复杂的时候,为了解耦,我们需要将不同的逻辑放在不同的命令中,这样既可以避免单个命令行工具函数臃肿。来看个例子:
# db.py
import click
@click.group()
def db():
pass
@click.command()
@click.option("--name", help="用户名")
def add(name):
"""
添加用户
:param name:
:return:
"""
click.echo(f'add user {name}')
@click.command()
@click.option("--id", help="用户名")
def delete(id):
"""
删除用户
:param id:
:return:
"""
click.echo(f'delete user {id}')
db.add_command(delete)
db.add_command(add)
if __name__ == '__main__':
db()
这是一个操作数据库DB的命令行工具,提供了添加用户和删除用户的命令行等其它操作,如果所有的业务逻辑全部写在一个函数,维护变得异常困难。
@click.group 装饰器把函数装饰成为一个Group对象,通过 Group 可以添加很多子命令。
python db.py --help
Usage: db.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
add 添加用户 :param name: :return:
delete 删除用户 :param id: :return:
从帮助文档中我们看到 add 和 delete 就是两个子命令。 Flask 框架的 flask 命令也是一个 Group 命令。
$ flask
Usage: flask [OPTIONS] COMMAND [ARGS]...
A general utility script for Flask applications.
Provides commands from Flask, extensions, and the application. Loads the
application defined in the FLASK_APP environment variable, or from a
wsgi.py file. Setting the FLASK_ENV environment variable to 'development'
will enable debug mode.
$ export FLASK_APP=hello.py
$ export FLASK_ENV=development
$ flask run
Options:
--version Show the flask version
--help Show this message and exit.
Commands:
add_user 添加账号 :param name: :param username: :param password:...
init_invite_code 添加邀请码
recommend_account 更新推荐账号
routes Show the routes for the app.
run Runs a development server.
shell Runs a shell in the app context.
提供了几个预定义的子命令和自定义的命令。
来源:https://foofish.net/python-click.html
猜你喜欢
- 2020年11月22日最新分享pycharm激活码,这次分享的pycharm激活码适用pycharm2020最新版及pycharm2019、
- 一、游戏展示所谓:开局一张图,后面全靠编。先放图片、动画展示一波。游戏玩法很简单,按空格猴子↑跳起来,躲开巨浪袭击,时间越
- 需要注意的是:更改完源程序.c文件,需要对整个项目重新编译、make install,对已经生成的文件进行更新,类似于之前VS中在一个类中增
- mssql 的正式名字是 SQL Server MS公司出的。图形操作界面好一些,性能还可以。在在mssql和oracle上不能互换.支持O
- 昨天在做mergeCSS的时候遇到两个正则匹配的问题,也花了不少的时间,最后在CSS森林群的 CE 同学帮助下,才完成了这俩正则,特别记录下
- 如题,本次是要实现点击超链接实现执行js代码,并确认是否删除数据库数据,采用php。首先链接数据库,查询数据库数据:<?php$dbm
- 本文介绍了python的构建工具setup.py,分享个大家,具体如下:一、构建工具setup.py的应用场景在安装python的相关模块和
- virtualenv创建一个拥有自己安装目录的环境, 这个环境不与其他虚拟环境共享库, 能够方便的管理python版本和管理python库。
- # -*- coding: utf-8 -*-# @Time : 2019-11-18 09:31# @Author : cxa# @Fil
- 1 lambdalambda原型为:lambda 参数:操作(参数)lambda函数也叫匿名函数,即没有具体名称的函数,它允许快速定义单行函
- 可视化单词统计词频统计中文分词项目架构新建一个文件,输入文件的内容,查询此文件中关键字的出现的次数,关键字出现的位置,将所有的文本按照中文分
- 代码如下from bs4 import BeautifulSoup #网页解析,获取数据import sys #正则表达式,进行文字匹配im
- 目录前言什么是pip再说 pip, 它就像应用宝下面给我们的手机安装应用宝Centos 安装pip for python2试用pip来安装库
- 前两天,班上同学写论文,需要将很多篇论文题目按照中文的习惯分词并统计每个词出现的频率。让我帮她实现这个功能,我在网上查了之后发现jieba这
- 以下是服务端代码var HTTPREQUEST_PROXYSETTING_DEFAULT = 0;var&nb
- 程序介绍本程序利用1.密码必须由数字、字母及特殊字符三种组合2.密码只能由字母开头3.密码长度不能低于16位来判断密码程度。首先,把可输入的
- 下面直接上代码留存,方便以后查阅复用。# -*- coding: utf-8 -*- #作者:LeniyTsan#时间:2014-07-17
- 这是一款简单,方便,功能齐全的分页类,可以根据自己的需要更改CSS样式文件以实现分页颜色的控制,利用p
- 在“按需加载”的需求中,我们经常会判断当脚本加载完成时,返回一个回调函数,那如何去判断脚本的加载完成呢?我们可以对加载的 JS 对象使用 o
- string.Template()string.Template()内添加替换的字符, 使用"$"符号, 或 在字符串内