python docopt模块详解
python docopt模块详解
docopt 本质上是在 Python 中引入了一种针对命令行参数的形式语言,在代码的最开头使用 """ """文档注释的形式写出符合要求的文档,就会自动生成对应的parse
用法:
docopt的使用非常简单,以Qingchat为例,你只需要在代码最开头加入:
"""Qingchat CLI Usage:
qingchat config ip <ip>
qingchat config port <port>
qingchat config login
qingchat group list
qingchat group choose <group_name>...
qingchat group clean
qingchat group send -t <content>
qingchat group send -i <media>
qingchat group send -f <file> [<delaytime>] Options:
-h --help Show this screen.
-v --version Show version.
"""
然后在执行代码中加入:
arguments = docopt(__doc__,version="Qingchat 0.3.2")
然后就会在程序中导入一个arguments字典,这个字典的内容为:
{
'-f': False,
'-i': False,
'-t': False,
'<content>': None,
'<file>': None,
'<group_name>': [],
'<ip>': '127.0.0.1',
'<media>': None,
'<port>': None,
'choose': False,
'clean': False,
'config': True,
'group': False,
'ip': True,
'list': False,
'login': False,
'port': False,
'send': False
}
下面我们来详细介绍一下如何完成一个符合 docopt 要求的注释文档:
Usage
所有出现在Usage:(区分大小写)和一个空行之间的文本都会被识别为一个命令组合, Usage 后的第一个字母将会被识别为这个程序的名字,所有命令组合的每一个部分(空格分隔)都会成为字典中的一个key
参数
形如<argument> 或者 ARGUMENT的文本将会被识别为参数
在转化后的字典中的取值为True 或者False.
Usage:my_program <host> <port>
选项
形如-o 或者 --option 的文本将会被识别为选项
在转换后的字典中的取值为True或False
Usage:my_program -f <file>
Tips:
1. 短选项可以组合起来,比如 -abc 等价于 -a -b -c
2. 长选项需要的参数需要使用 = 或者空格来分隔, --input=ARG 等价于 --input ARG
3. 短选项可以不需要空格, -f FILE 等价于 -fFILE
命令
不满足 --options 或者 <arguments> 的文本将会被识别为(子)命令
在转化后的字典中取值为 True 或者 False
可选项
形如 [optional elements]的文本是可选项
elements包括上述的三种类型:参数,选项以及命令
在相同或者不同的括号中都是一样的:
Usage:my_program[command --option <argument>]
等价于
Usage:my_program[command][--option][<argument>]
必选项
形如(required elements)的文本是必选项
上述三种元素默认都是必填项, () 符号用在一些比较特殊的情形下,比如:
Usage:my_program(--either-this<and-that>|<or-this>)
选择项
形如element|another 的文本是选择项,可以从中选择一个值
Usage:my_program go (--up|--down|--left|--right)
列表项
形如element...的文本是列表项,可以输入多个参数
比如:
Usage:my_program open <file>...
然后可以通过 arguments['<file>']来访问这个列表
Option
option 部分用于指定某些特殊情形,例如:
1. 将某个短参数与长参数关联起来,比如 -i <file>, --input <file>
2. 某个选项有一个参数
3. 选项的默认值,比如 --coefficient=K The K coefficient [default: 2.95]
python docopt模块详解的更多相关文章
- python time模块详解
python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明 一.简介 ...
- (转)python collections模块详解
python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...
- python pathlib模块详解
python pathlib模块详解
- Python Fabric模块详解
Python Fabric模块详解 什么是Fabric? 简单介绍一下: Fabric是一个Python的库和命令行工具,用来提高基于SSH的应用部署和系统管理效率. 再具体点介绍一下,Fabri ...
- python time 模块详解
Python中time模块详解 发表于2011年5月5日 12:58 a.m. 位于分类我爱Python 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括: ...
- python常用模块详解
python常用模块详解 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用p ...
- python os模块详解
一.Python os模块(Linux环境) 1.1 执行shell命令 os.system('cmd') 执行命令不保存结果 os.popen('command') 执行后返回结果,使用.read( ...
- Python ZipFile模块详解(转)
Python zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个cl ...
- python常用模块详解(一)
一.简介 模块是一个保存了Python代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码 模块分为三种: 自定义模块 内置标准模块 开源模块(第三方) 自定义模块: 模块导入 impor ...
随机推荐
- finecms如何控制调用子栏目的数量
finecms如何控制调用子栏目的数量?比如只要调用栏目id为23下的3个子栏目要怎么写?我们把num=3放后面不能实现,放在return前面就可以了,原来是顺序的问题,return只能放最后 {li ...
- Stylus的使用
vue-cli项目安装使用stylus步骤:1. npm install stylus -D命令,在项目内安装stylus.(注意:命令结尾 -D 即是 --save-dev 的简写形式) 2.需要安 ...
- 流程控制之if...else
# #如果:男的年龄>49,那么:小哥哥## age_of_boy = 50# if age_of_boy > 49:# print('小哥哥你好')### # 如果:女人的年龄>3 ...
- 致敬金庸:武侠版编程语言...Java像张无忌还是令狐冲?
我就喜欢这样,等新闻消失,热点过去,人们快要遗忘的时候, 用自己的方式,想起他.让他被人想起. 短评:夫千里之远,不足以举其大:千仞之高,不足以举其深.<倚天屠龙记> 短评:这世间和张三丰 ...
- 后续使用dubbo的必要性的思考
要做微服务,要做分布式,就得先解决网络调用即rpc的问题
- Linux和windows 查看程序、进程的依赖库的方法
Linux: 1. 利用ldd查看可执行程序的依赖库 [root@~]# ldd /usr/local/php/bin/php linux-vdso.so.1 => (0x00007ff ...
- c++类成员变量初始化相关问题
对于内置变量的自动初始化 代码1 1 #include<stdio.h> 2 #define CONST 100 3 int *p1; 4 int a[2]; 5 int b; 6 sta ...
- python中参数传递之位置传递、关键字传递、包裹传递与解包裹
原文地址https://blog.csdn.net/love666666shen/article/details/77131487 1.位置与关键字传递 (1)位置传递:先用形式参数定义,然后在调用时 ...
- lldb使用
常用 si,ni ,ex, mem,di,reg,b,c,x 以下内容是lldb帮助文档中内容: apropos -- List debugger commands related ...
- Python学习笔记之装饰器原理
def decorator(fn): def wrapper(): print("询价") fn() print("购买成功!") return wrapper ...