首页 科技正文

鸡西招聘大全:开发一款图片压缩工具(三):使用 click 实现命令行

admin 科技 2020-04-28 36 0

上一篇实现了图片的压缩函数。现在若是需要对图片举行压缩,可以挪用实现的函数举行压缩:

pngquant_compress('elephant.png', force=True, quality=20) 

 

然则每次输入 python run_script.py 没有对应的参数传入, 还要去改剧本参数挺贫苦的。可以添加下令行的方式举行挪用:

python run_script.py elephant.png --force --quality 30 

 

1. 使用 click

python 的 click 库可以异常利便的实现下令行挪用。 click 是 flask 作者开发的。用法很简单,只需要添加装饰器在需要运行的程序上就可以了:

当我输入 python demo.py —help 的时刻, 会显示下令行辅助信息:

 

2. click 必填参数 argument

可以在函数上添加 @click.argument('arg_name')

import click @click.argument("arg_name") def pngquant_compress(): 

 

当程序没有填入必填参数时,将会提醒:

 

3. click 可选参数 option

option 是 click 的重点,比 argument 要天真许多。他的示意方式和 argument 差不多:

import click @click.option("--force") def pngquant_compress(): pass 

 

若是想用多个名称同时示意一个参数,只需要继续在 option 方式中添加位置参数, 就可以通过 -f, --violent 的形式
传入可选参数:

import click @click.option("--force", "-f", "--violent") def pngquant_compress(): pass 

 

若是不想以 --force value 的形式传入值,也可以直接通过 flag 形式,不传入任何值:

import click @click.option("--force", "-f", "--violent", is_flag=True) def pngquant_compress(): pass 

 

显示提醒信息:

import click @click.option( "--force", "-f", "--violent", is_flag=True, help="强制执行" ) def pngquant_compress(): pass 

 

4. 参数类型限制

好比 quality 参数传入的可以是数字 20, 也可以是 20-30 这种形式。这时刻需要自定义一种数据类型举行校验。

class QualityInteger(click.ParamType): name = "QualityInteger" def convert(self, value, param, ctx): if value.isdigit(): return int(value) try: min_v, max_v = value.split('-') int(min_v), int(max_v) return value except ValueError: self.fail('参数不符合类似 20-30 或者 30 的规范') 

 

此时若是输入的参数没有通过磨练,下令行会提醒错误:

\picom>python demo_06_封装成下令行.py elephant.png -q 20-4a Usage: demo_06_封装成下令行.py [OPTIONS] FP Error: Invalid value for "--quality" / "-q": 参数不符合类似 20-30 或者 30 的规范 

 

5. setuptools 打包

from setuptools import setup, find_packages setup( name='picom', version='0.1', install_requires=[ 'Click', 'requests' ], ) 

 

setup.cfg 配置文件:

[metadata] name = picom description = A app to compress images. [options] packages = find: package_dir = = src include_package_data = true python_requires = >= 3.6 [options.packages.find] where = src [options.entry_points] console_scripts = picom = picom.cli:cli 

 

把 picom 模块放入依赖包路径,执行 pip install --editable . 可以安装这个模块。
安装完成以后,可以在 python 注释器路径看到 picom.exe 下令行文件。建议建立虚拟环境安装,以免对系统环境造成污染。

鸡西招聘大全:开发一款图片压缩工具(三):使用 click 实现命令行 第1张

 

6. 打消 pngquant 全局变量,改由 picom 包内挪用

之前在 pngquant_compress 函数中使用 pngquant 下令行是接纳环境变量,现在既然是通过 picom 下令去执行,就可以把 pngquant
的环境变量去掉。

首先需要在 picom 包中添加一个 ext 的包存放 pngquant 的执行文件。
鸡西招聘大全:开发一款图片压缩工具(三):使用 click 实现命令行 第2张

修改原来的挪用函数:

# pngquant.py # 原来的写法 command = f'pngquant {fp} --skip-if-larger {force_command} {quality_command}' # 新写法,直接挪用 ext/ 下的可执行文件,而不是环境变量中的 pngquant pngquant_cmd = Path(__file__).resolve().parent / 'ext' / 'pngquant' command = f'{pngquant_cmd} {fp} --skip-if-larger {force_command} {quality_command}' 

 

7. 总结

通过 click 库和 setuptool 打包,picom 压缩工具使用变得比较简单:

picom elephant.png 
,

Sunbet

Sunbet www.bus123.net网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体

版权声明

本文仅代表作者观点,
不代表本站Allbet的立场。
本文系作者授权发表,未经许可,不得转载。

评论