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>