Python中的命令行参数解析工具docopt详解

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中

猜你喜欢

转载自blog.csdn.net/freeyy1314/article/details/81304935