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


猜你喜欢
- vue-i18n在单文件js中使用示例import Vue from 'vue'import VueI18n from
- 在 MySQL 主从复制时,有时候会碰到这样的故障:在 Slave 上 Slave_IO_Running 和 Slave_SQL_Runni
- 前提:list以及array是python中经常会用到的数据类型,当需要对list以及array进行文件的读写操作的时候,由于write函数
- 在使用django的modelform的时候,修改表单,图片在form表单显示的是一个链接。显示缩略图如下第一步:from django.f
- 步骤查看历史记录# 查看历史记录git log -3实例Simba@SIMBA MINGW64 /t/IDE/IDEA/Workspace-
- 前言Pandas是Python下一个开源数据分析的库,它提供的数据结构DataFrame极大的简化了数据分析过程中一些繁琐操作。1. 基本使
- 临近春节,脚本之家小编带领大家用Python抢火车票!首先我们需要splinter安装:pip install splinter -i ht
- 如下:data = pd.read_csv('20180201.txt',sep = '|',dtype =
- Update Scanner这个Firefox附加软件也是一种很好的选择。Update Scanner可以同时跟踪多个网页,并为不同的网页设
- 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的
- 本文为大家分享了php运行环境搭建安装图文教程,供大家参考,具体内容如下安装apache:1,不要安装到有中文的目录中:2,尽量将apach
- 最近在开发中用到了vue3的defineProps、defineEmits和defineExpose,感觉发现新大陆一般,所以利用闲碎时间对
- 什么是setuptoolssetuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包
- 一、概述机器学习算法在近几年大数据点燃的热火熏陶下已经变得被人所“熟知”,就算不懂得其中各算法理论,叫你喊上一两个著名算法的名字,你也能昂首
- This application failed to start because it could not find or load the
- #环境win64+anaconda+python3.6list & array(1)list不具有array的全部属性(如维度、转置
- 一:建立对象引用计数1. 相关代码void_Py_NewReference(PyObject *op){ if (
- 本文实例讲述了Python分析微信好友性别比例和省份城市分布比例的方法。分享给大家供大家参考,具体如下:安装itchatpip instal
- 前面章节我们学些了文件对象的创建、写入与读取,并且针对 .py 文件 与 .txt 文件进行了有针对性的小练习。 通过前面的学习我们知道,文
- 获取带有中文参数的url内容对于中文的参数如果不进行编码的话,python的urllib2直接处理会报错,我们可以先将中文转换成utf- 8