1、概述
很多电影中的黑客都有一个特点:买不起鼠标!抱歉,瞧不起鼠标!
究其原因,主要有以下几个:
- 鼠标点击速率远比键盘操作低。
- Linux主宰着黑客世界,Linux更多以命令行为主。
- 键盘的敲击感能给人激情澎湃的感觉(也是机械键盘盛行的原因)。
试想一下,在人群围观之下,我们键盘操作猛如虎,屏幕刷刷刷,围观群众直瞪眼,拍手称快。
今天我们就籍此基于Python开发一个命令行工具。
笔者所使用的Python版本为 3.5。
2、开发过程
2.1 安装 docopt 类库
执行命令:pip install docopt
2.2 docopt 简要说明
docopt是Python的一个类库,使得通过指定格式的文本说明,即可自动处理命令行启动参数。
docopt约定在脚本代码开头使用 “”” “””
在使用docopt之前,Python提供默认的命令行参数类库 configparser,后续文章会讲解二者之间的区别。
2.3 本地创建文件夹 cli-demo 作为工程的根目录
文件夹中不要存在中文字符或特殊字符,否则可能会导致解析失败
2.4 cli-demo目录下创建文件夹 pkg
2.5 pkg文件夹内创建 init.py 文件
其中,init.py 记录版本信息
#encoding:utf-8__version__ = "v0.1.0"
2.6 pkg文件夹内创建 hello.py 文件
2.7 编写 docopt 文档注释
#encoding:utf-8""" CLI Demo Tool
Usage:
clidemo cmdA <valueA>
clidemo cmdB paramB <valueB>
Options:
-h --help Show Help doc.
-v --version Show Version.
"""
docopt会校验Usage内的命令格式,如 clidemo cmdA <valueA>
中,cmdA如果在命令行中出现 ,则为 True,否则为False,对应数值或字符串,否则为None。
docopt校验输入的命令格式中,不存在Usage定义的格式,则会提示错误,并显示使用方法。
2.8 hello.py编写核心代码
核心代码在 cmd
函数,实现内容为 符合命令行操作规则后输出指定命令内容,最终显示参数值。
最终的文件结构如下:
2.9 测试命令
python pkg/hello.py
python pkg/hello.py cmdA
python pkg/hello.py cmdA BeTester
python pkg/hello.py cmdB paramB
python pkg/hello.py cmdB paramB BeTester
python pkg/hello.py cmdC
3、生成安装包
要编写第三方库或工具,最终需要 setup.py
来完成。 setup.py
核心是使用 distutils.core 类库的 setup 方法,解析该类库对应的依赖与输出约束,进而完成该类库的部署。
3.1 编写 setup.py
#encoding:utf-8from pkg import __version__from setuptools import setupfrom setuptools import find_packages
setup(
name = "CliDemo",
version = __version__,
description = "Command line Demo",
author = "betester",
packages = find_packages(),
platforms = "any",
install_requires = [ "requests",
"docopt>=0.6.2"
],
entry_points = { "console_scripts": ['clidemo = pkg.hello:cmd']
}
)
name
名称,用于所生成的egg文件的命名格式,egg的命名格式为: [name]-[version].[python3.5|python3.6].egg
egg 是 setuptools 引入的一种文件格式,用于Python模块的安装。setuptools可以识别egg文件并解析安装。
Eggs are the Pythons Jars are to Java。Egg之于Python 好比 Jar 之于 Java。
version
版本号信息,用于所生成egg文件的命名格式。
description
描述信息
author
作者名称
packages
需要处理的包目录,可以通过以下两种方式表示:
- 列表:如本工具中的pkg模块,可输入多个模块。
- find_packages:通过setuptools的find_packages获取源目录下所有的包。
platforms
适用的软件平台列表,any表示适配所有平台。
install_requires
对指定类库的依赖(及版本号依赖关系),如本工具对 docopt 有依赖。
entry_points
生成的工具,分为 console_scripts 和 gui_scripts 两种类型。console_scripts为命令行启动工具,gui_scripts为GUI启动工具。
当使用 console_scripts 时,clidemo 即为待生成的可执行文件的名称, pkg.hello:cmd为该可执行程序对应的执行方法。
pkg.hello:cmd 中,模块与方法之间使用 : 隔开。
3.2 安装命令行工具
在cli-demo目录下执行 python setup.py install
3.3 测试命令行工具
clidemo
clidemo cmdA
clidemo cmdA BeTester
clidemo cmdB paramB
clidemo cmdB paramB BeTester
clidemo cmdC
4、小结
命令行工具在软件开发过程中始终占据着重要的地位,编译构建用到大家听过的 gradle命令或 xcodebuild 命令,更新代码时使用 git pull,触发自动化测试时使用robot命令(RobotFramework)。
同时,我们也可以根据工作需要,编写相应的测试工具完成重复、低效的工作,让我们的测试更加有趣,让我们的思维更加开阔。