一、介绍
docopt是一个命令行参数解析工具,相比于Python自带的argparse和getopt模块,它更加简单易用。docopt的写法借鉴了Unix系统中许多命令的使用方式,让命令行参数解析更加符合自然语言的习惯。本文将详细介绍docopt的各个功能和使用方法。
二、安装
使用pip安装即可:
pip install docopt
三、使用
前置知识:docopt的参数解析是基于模板字符串来进行的,因此我们需要先定义一份模板。
下面我们通过例子来了解docopt的用法。
示例1:解析添加任务的命令行参数
"""Usage:
task add <name> [--desc=<desc>] [--date=<date>]
Options:
--desc=<desc> 任务描述
--date=<date> 任务截止日期
"""
from docopt import docopt
if __name__ == '__main__':
args = docopt(__doc__)
print(args)
我们定义了一个模板字符串,里面列出了所有可能的命令行参数。这些参数以及它们的含义都被写在了docstring中。下面通过一些例子来解释:
1.1、命令行直接输入python文件名
python test.py
结果:
{'<name>': None, '--desc': None, '--date': None, 'add': False}
1.2、输入'python test.py add mytask'
python test.py add mytask
结果:
{'<name>': 'mytask', '--desc': None, '--date': None, 'add': True}
1.3、输入'python test.py add mytask --desc="任务描述"'
python test.py add mytask --desc="任务描述"
结果:
{'<name>': 'mytask', '--desc': '任务描述', '--date': None, 'add': True}
示例2:解析复制文件的命令行参数
"""Usage:
filetool cp <file1> <file2> [-r | --replace] [-d | --directory=<directory>]
Options:
-r --replace 如果目标文件已存在,则替换
-d --directory=<directory> 目标文件夹
"""
from docopt import docopt
if __name__ == '__main__':
args = docopt(__doc__)
print(args)
与示例1类似,这里也定义了一个模板字符串。这个模板定义了一个复制文件的命令。可以传递两个文件,以及可选的两个选项。
下面通过一些例子来解释:
2.1、发现程序的运行参数不符合要求,列出命令行参数帮助
python filetool.py -h
结果:
Usage:
filetool cp <file1> <file2> [-r | --replace] [-d | --directory=<directory>]
Options:
-r --replace 如果目标文件已存在,则替换
-d --directory=<directory> 目标文件夹
2.2、传递两个文件,不做其他修改
python filetool.py cp file1.txt file2.txt
结果:
{'cp': True, '-r': False, '--replace': False, '-d': False, '--directory': None, '<file1>': 'file1.txt', '<file2>': 'file2.txt'}
2.3、复制一个文件到目标文件夹,并是否替换目标文件
python filetool.py cp file1.txt /tmp/ --replace
结果:
{'cp': True, '-r': True, '--replace': True, '-d': True, '--directory': '/tmp/', '<file1>': 'file1.txt', '<file2>': None}
四、总结
docopt是Python中一个非常方便的命令行参数解析工具。它的使用非常简单,只需要定义一份模板字符串,就能方便地解析各种命令行参数。本文中介绍了docopt的各个功能和使用方法,并给出了两个实际的应用例子。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中的命令行参数解析工具之docopt详解 - Python技术站