1、前言
docopt 是一个开源的库, 是一个用来解析命令行参数的工具,当想要在 Python 程序后面附加参数时,将想要的参数按照一定的格式或规则写出来后,便可以自动地进行解析。它在 README 中就已经做了详细的介绍,并且还附带了很多例子可供学习,这篇文章也是翻译一下 README 中内容,并加入了一些自己的理解。
2、docopt的安装
(1)pip安装
sudo pip install docopt
(2)从github上下载源码
下载地址:https://github.com/docopt/docopt
下载后,使用如下命令进行安装
python setup.py install
3、docopt使用方法解析
首先来看docopt中README中给出的例子
"""Naval Fate.
Usage:
naval_fate.py ship new <name>...
naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
naval_fate.py ship shoot <x> <y>
naval_fate.py mine (set|remove) <x> <y> [--moored | --drifting]
naval_fate.py (-h | --help)
naval_fate.py --version
Options:
-h --help Show this screen.
--version Show version.
--speed=<kn> Speed in knots [default: 10].
--moored Moored (anchored) mine.
--drifting Drifting mine.
"""
from docopt import docopt
if __name__ == '__main__':
arguments = docopt(__doc__, version='Naval Fate 2.0')
print(arguments)
上述代码可以分为三个部分:Usage, Options, main函数
其中,Usage和Options为注释中内容,main函数为程序部分
(1)Usage
Usage部分中每一行表示该函数(文件)的一种调用格式,只需要按照其中某一行进行调用即可运行相应的程序,解析也是按照此格式进行,其中参数格式如下表所示
Argument | Type | Example | Discription | Result | |
1 | arg_name | Boolean | ship | 在使用包含该参数项的调用模式时,必须带有该参数 | 'ship‘:True |
2 | <arg_name> | String | <x> | 在使用包含该参数项的调用模式时,必须带有该参数 | '<x>': 'arg_value' |
3 | [--arg_name] | Boolean | [--name] | 在使用包含该参数项的调用模式时,若带有该参数,则该参数为True | python file_name.py ship '--name': True python file_name.py '--name': False |
4 | [-arg-names] | Boolean | [-abcd] | 在使用包含该参数项的调用模式时,可选择其中若干个参数,则选中的参数为True | python file_name.py -ac {'-a': True, '-b': False, '-c': True, '-d': False} |
5 | (arg_name) | Boolean | (ship) | 在使用包含该参数项的调用模式时,必须带有该参数 | 'ship‘:True |
6 | (arg_name1 |arg_name2) |
Boolean | (set | remove) |
在使用包含该参数项的调用模式时,必须带有两个参数中的一个 | python file_name.py set {'set': True, 'remove': False} |
7 | [--arg_name=default_value] | String | [--speed=<kn>] | 在使用包含该参数项的调用模式时,若不带有该参数,则该参数的值为默认值,默认值的大小需要在(2)Option中进行描述。若带有参数值,可使用空格或等号连接 | python file_name.py '--speed': default_value python file_name.py --speed=20 or python file_name.py --speed 20 ’--speed': '20' |
8 | ... | list | [--name]... | 在使用包含该参数项的调用模式时,可输入多个值,用逗号连接 | python file yao, zhang '--name': ['yao', 'zhang'] |
(2)Options
待续...
(3)main函数
main函数为通过在Terminal调用python文件时运行的部分,该部分代码主要进行的操作是通过
arguments = docopt(__doc__, version='Naval Fate 2.0')
将注释部分按一定格式进行解析后,得到对应的参数,存储至一个 字典变量arguments中