让你如“老”绅士般编写 Python 命令行工具的开源项目:docopt
作者:HelloGitHub-Prodesire
HelloGitHub 的《讲解开源项目》系列,项目地址:https://github.com/HelloGitHub-Team/Article
一、前言
在第一篇“初探 docopt”的文章中,我们初步掌握了使用 docopt
的三个步骤,了解了它不同于 argparse
的设计思路。
那么 docopt
的使用模式都有哪些呢?其接口描述中都支持哪些语法规则呢?本文将带你深入了解 docopt
。
本系列文章默认使用 Python 3 作为解释器进行讲解。 若你仍在使用 Python 2,请注意两者之间语法和库的使用差异哦~
二、使用模式
在上一篇文章中我们提到 docopt
是通过定义一个包含特定内容的字符串,也就是接口描述,来达到描述命令行功能的目的。
那么接口描述的总体规则是这样的:
- 位于关键字
usage:
(大小写不敏感)和一个可见的空行之间的文本内容会被解释为一个个使用模式。 useage:
后的第一个词会被解释为程序的名称,比如下面就是一个没有命令行参数的示例程序:
Usage: cli
- 接口描述中可以包含很多有各种元素的模式,以描述命令行用法,比如:
Usage: cli command --option <argument> cli [<optional-argument>] cli --another-option=<with-argument> cli (--either-that-option | <or-this-argument>) cli <repeating-argument> <repeating-argument>...
2.1 位置参数:
使用 <
和 >
包裹的参数会被解释为位置参数。
比如,我们可以指定两个位置参数 x
和 y
,先添加的 x
位于第一个位置,后加入的 y
位于第二个位置。那么在命令行中输入 1 2
的时候,分别对应到的就是 x
和 y
:
""" Usage: cli <x> <y> """ from docopt import docopt arguments = docopt(__doc__, argv=['1', '2']) print(arguments)
其输出为:
{'<x>': '1', '<y>': '2'}
2.2 选项参数:-o --option
以单个破折号(-
)开头的的参数为短选项,以双破折号(