python docopt模块详解

docopt
用了这个家伙可以在命令行执行py文件时传递参数,例如 :python test.py --tread_num 10

1.安装

  1. 指定版本安装:pip install docopt==0.6.2
  2. 源码安装:python setup.py install,下载源码。

2.快速入门

以用户管理为例子做一下测试。

示例代码:

"""UserManage
Usage:
  user_manage user (add|delete) () [  --authority=]
  user_manage change_name 
  user_manage change_pwd 
  user_manage add_description ...
  user_manage -h | --help
  user_manage --version

Options:
  -h --help     帮助.
  -v --version     查看版本号.
  --authority=  权限设置 [default: user].
  --group=      分组
"""
from docopt import docopt

arguments = docopt(__doc__, version='UserManage 2.0')

if arguments.get("add"):
    print("添加用户成功")
elif arguments.get("delete"):
    print("删除用户成功")
elif arguments.get("change_name"):
    print("修改名字成功")
elif arguments.get("change_pwd"):
    print("修改密码成功")
elif arguments.get("add_description"):
    print("添加用户描述成功")

测试结果如下:
(python docopt模块详解_第1张图片)

代码解读

作者很鸡贼,它解析py文件__doc__的返回值 。然后生成一个dict对象,比如上面实例代码在执行python test.py user add fireln 123456 --authority=admin后生成的dict对象就是:

{
'--authority': 'admin',
 '--help': False,
 '--version': False,
 '': [],
 '': 'fireln',
 '': '123456',
 'add': True,
 'add_description': False,
 'change_name': False,
 'change_pwd': False,
 'delete': False,
 'user': True
 }

所以命令行所使用的命令都需要在py文件的说明文档里定义。在命令行执行时

定义命令行

命令行定义知道在哪里定义的了,下面来一起学习下怎么定义的吧。
定义命令行的两个部分分别是Usage和Options,下面具体介绍。

Usage

Usage是有自己的规则的,每一个Usage都可以包含如下元素,可参照user_manage user (add|delete) () [ --authority=]

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

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

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

  • []
    代表可选的元素,方括号内的元素可有可无

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

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


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

  • [options]
    指定特定的选项,完成特定的任务。

Options

Options里面主要是对Usage中定义的选项和参数进行描述或赋初值。
例如示例中的--authority= 权限设置 [default: user].default就是用来赋初值的

参考文章

http://www.jb51.net/article/109598.htm

你可能感兴趣的:(python)