分享

使用Python创建命令行工具

 wenxuefeng360 2022-07-02 发布于四川

图片

1、概述

很多电影中的黑客都有一个特点:买不起鼠标!抱歉,瞧不起鼠标

究其原因,主要有以下几个:

  1. 鼠标点击速率远比键盘操作低。
  2. Linux主宰着黑客世界,Linux更多以命令行为主。
  3. 键盘的敲击感能给人激情澎湃的感觉(也是机械键盘盛行的原因)。

试想一下,在人群围观之下,我们键盘操作猛如虎,屏幕刷刷刷,围观群众直瞪眼,拍手称快。
图片

今天我们就籍此基于Python开发一个命令行工具。

笔者所使用的Python版本为 3.5。

2、开发过程

2.1 安装 docopt 类库

执行命令:pip install docopt

2.2 docopt 简要说明

docopt是Python的一个类库,使得通过指定格式的文本说明,即可自动处理命令行启动参数。

docopt约定在脚本代码开头使用 “””  “””  文档注释符的形式,按照指定格式(如Usage、Options)编写文档说明,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

需要处理的包目录,可以通过以下两种方式表示:

  1. 列表:如本工具中的pkg模块,可输入多个模块。
  2. 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)。

同时,我们也可以根据工作需要,编写相应的测试工具完成重复、低效的工作,让我们的测试更加有趣,让我们的思维更加开阔。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多