作者: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

以单个破折号(-)开头的的参数为短选项,以双破折号(