docopt

docopt:抛弃optparse和argparse吧,使用docstrings来构建优雅的,可读性强的,并且复杂(如果你需要的话)的命令行界面。Docopt 提供多种语言版本,包括:Java、Python、PHP、C/C++、.NET、D语言、Scala、Go 语言等,详细列表请看 https://github.com/docopt/

 

介绍

docopt 本质上是在 Python 中引入了一种针对命令行参数的形式语言,在代码的最开头使用 """ 文档注释的形式写出符合要求的文档,就会自动生成对应的parse,体验非常赞。

API

 docopt(doc, argv=None, help=True, version=None, options_first=False)

 //doc可以是一个文档字符串

 //argv默认使用sys.argv[1:]

一个简单的例子

# coding: utf-8

"""命令行火车票查看器

Usage:
    tickets [-gdtkz] <from> <to> <date>

Options:
    -h,--help   显示帮助菜单
    -g          高铁
    -d          动车
    -t          特快
    -k          快速
    -z          直达

Example:
    tickets 北京 上海 2016-10-10
    tickets -dg 成都 南京 2016-10-10
"""
from docopt import docopt

def cli():
    """command-line interface"""
    arguments = docopt(__doc__,version="1.0")
    print(arguments)

if __name__ == '__main__':
    cli()

 上面的程序中, docopt 会根据我们在 docstring 中的定义的格式自动解析出参数并返回一个字典,也就是 arguments, 我们打印出了这个字典的内容。下面我们运行一下这个程序, 比如查询一下北京到上海的动车和高铁:

C:\Users\Administrator\PycharmProjects\AAA\12360>python tickets.py -dg 北京 上海 2017-02-07
{'-d': True,
 '-g': True,
 '-k': False,
 '-t': False,
 '-z': False,
 '<date>': '2017-02-07',
 '<from>': '北京',
 '<to>': '上海'}

 这样应该就能很容易看出来,我们在文档中写的每一个短语,都被转化为一个对应的类型。只要直接调用 arguments['xxx'] 就可以判断或者使用对应的值,从而实现对应的功能。

详解

Usage

所有出现在 usage: (区分大小写)和一个空行之间的文本都会被识别为一个命令组合, usage 后的第一个字母将会被识别为这个程序的名字,所有命令组合的每一个部分(空格分隔)都会成为字典中的一个key。

参数

形如 <argument> 或者 ARGUMENT 的文本将会被识别为参数。

在转化后的字典中的取值为 True 或者 False

Usage: my_program <host> <port>

Option

 Option 部分用于指定某些特殊情形,比如:

    将某个短参数与长参数关联起来,比如 -i <file>, --input <file>

posted @ 2017-02-07 17:01  Vincen_shen  阅读(628)  评论(0)    收藏  举报