gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python中的命令行参数解析工具之docopt详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言 。

docopt 是一个开源的库,代码地址:https://github.com/docopt/docopt。它在 README 中就已经做了详细的介绍,并且还附带了很多例子可供学习,这篇文章也是翻译一下 README 中内容…… 。

docopt 最大的特点在于不用考虑如何解析命令行参数,而是当你把心中想要的格式按照一定的规则写出来后,解析也就完成了.

docopt的安装 。

docopt有很多种版本,分别支持不同的语言,最简答的docopt支持python脚本,docopt.java支持java脚本,docopts则是支持shell脚本的(下面的例子主要以docopts为例),具体的可以参见github的docopt说明 。

安装docopt 。

以mac os x为例安装,安装docopts前首先需要安装docopt,有两种安装方法 。

方法一 。

比较简单的方法是直接用 pip 安装, pip install docopt==0.6.2 。

有些mac可能不支持直接pip 指令,需要先安装pip 。

方法二 。

也可以在github上下载源码(docopt是开源项目),然后通过python setup.py install 安装 。

安装docopts 。

安装docopts就必须使用上面安装docopt的方法二,在GitHub上下载源码,然后 使用python安装,下载地址 。

docopt 的实现简单分析 。

在 Python 中有这么一个属性 __doc__ ,它的值是字符串,一般表示帮助信息,而 docopt 正是利用了这一属性,把帮助信息替换成命令行参数解析说明,再对它进行解析即可.

举个 docopt 中的例子来说明:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"""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)

上述代码段中,很大一段帮助信息就是我们的命令行参数解析说明,在函数入口处调用docopt函数进行解析,返回的arguments变量是一个字典型变量,它记录了选项是否被选用了,参数的值是什么等信息,当程序从命令行运行时,我们就是根据arguments变量的记录来得知用户输入的选项和参数信息.

所以如何写好命令行参数解析说明就变得至关重要了,命令行解析信息包含两部分,分别是使用模式格式和选项描述格式.

使用模式格式(Usage pattern format) 。

使用模式以usage:开始,以空行结束,如上代码段所示,它主要描述了用户添加命令行参数时的格式,也就是使用时的格式,解析也是按照此格式来进行的.

每一个使用模式都包含如下元素:

* 参数 。

参数使用大写字母或者使用尖括号<>围起来.

* 选项 。

选项以短横线开始-或者--。只有一个字母时格式-o,多于一个字母时--output。同时还可以把多个单字母的选项合并,-ovi等同于-o、-v、-i。选项也能有参数,此时别忘了给选项添加描述说明.

接下来是使用模式中用到的一些标识的含义,正确地使用他们能够更好的完成解析任务:

* [] 。

代表可选的元素,方括号内的元素可有可无 。

* () 。

代表必须要有的元素,括号内的元素必须要有,哪怕是多个里面选一个.

* | 。

互斥的元素,竖线两旁的元素只能有一个留下 。

* ... 。

代表元素可以重复出现,最后解析的结果是一个列表 。

* [options] 。

指定特定的选项,完成特定的任务.

选项描述格式(Option description format) 。

选项描述同样必不可少,尤其是当选项有参数,并且还需要为它赋默认值时.

为选项添加参数的格式有两种:

?
1
2
- o FILE - - output - FILE  # 不使用逗号,使用 = 符号
- i < file >, - - input < file > # 使用逗号,不使用 = 符号

为选项添加描述说明,只需要用两个空格分隔选项和说明即可.

为选项添加默认值时,把它添加到选择描述后面即可,格式如下[default: <my-default-value>] 。

?
1
2
3
- - coefficient = K The K coefficient [default: 2.95 ]
- - output = FILE Output file [default: test.txt]
- - directory = DIR Some directory [default: . / ]

如果选项是可以重复的,那么它的值[default: ...]将会一个 list列表,若不可以重复,则它的值是一个字符串.

使用 。

理解了 使用模式格式 和 选项描述格式 之后,再配合给出的例子就能较好的理解了.

接下来就是得到输入的信息了.

在前面提到arguments参数是一个字典类型,包含了用户输入的选项和参数信息,还是上面的代码段例子,假如我们从命令行运行的输入是 。

?
1
python3 test.py ship Guardian move 100 150 - - speed = 15

那么打印arguments参数如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{ '--drifting' : False ,
  '--help' : False ,
  '--moored' : False ,
  '--speed' : '15' ,
  '--version' : False ,
  '<name>' : [ 'Guardian' ],
  '<x>' : '100' ,
  '<y>' : '150' ,
  'mine' : False ,
  'move' : True ,
  'new' : False ,
  'remove' : False ,
  'set' : False ,
  'ship' : True ,
  'shoot' : False }

从打印信息可以看到,对于选项,使用布尔型来表示用户是否输入了该选项,对于参数,则使用具体值来表述.

这样一来,程序就可以从arguments变量中得到下一步的操作了。若是用户什么参数都没输入,则打印Usage说明提示输入内容.

总结 。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流.

原文链接:http://www.glumes.com/how-to-use-docopt/ 。

最后此篇关于Python中的命令行参数解析工具之docopt详解的文章就讲到这里了,如果你想了解更多关于Python中的命令行参数解析工具之docopt详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com