Part 1 说明:
0 嫌啰嗦的直接到 正式开始 的位置。
1 docopt 是一个参数解析的库。所以这个算是一个小教程。如果没有python基础,还是建 议先去学一下。
2 另外百度一下发现了 optparse 这个python 系统自带的库。简单的看了看。知乎上大神说 珍爱生命 远离 optparse。下了我一跳。这里不代表我的观点。毕竟自带的,可以去看看比较一下。。。不过这不是本文的重点了。
3 百度了半天的docopt 教程只找到了这个 看了还是没怎么懂。算了,还是自己搞一搞吧。
part 2 背景:
前几天,看了一个教程。制作一个火车票查看器这个小功能作者写得挺有思路确实写得不错,如果感兴趣可以去看看这个文章。制作完这个小的工具以后就能用命令去查询相应的火车票情况。 so cool。
火车票查询输出结果.png
python学艺不精+_+,想探究一下命令是怎么一步步控制执行代码的。打开作者的文件里面发现了只是这个样子。
火车票的py实现.png
甚至都没有看到怎么去写出想要的规则??好吧,一开始我也是拒绝的。那么就去找一下源码吧。这里的说明也是最权威了,于是找到了这么一段话:
git截图.png
大概意思是: 我擦,你还用原始的方式写解析参数? 别傻了,你是不是想一边写注释 一边 顺带把解析规则也写了,对!docopt就是要让你这么吊~ (翻译的不对?)
看了上面的这段话我也是深深的震精了? 什么? 注释都能用在程序里面? 合理吗? 于是自己还是去探究了一下如下函数:
doc小demo.png
也就是说 这个函数里面的注释能通过一个doc 参数打印出来,当然要是这个是整个文档的说明,那么打印的就是文档对应的doc 这里就不测试了,下面的就是这样的例子。docopt的作者也是真的吊吊吊。
好吧安装 docopt 的方式 pip3 install docopt 。上面写了那么多废话。都懒得删除了。。。
正式开始
docopt 用了一天了感觉完整的分析一个demo 就能说明其中基本用法了。。
完整的demo.png
上图是一个完整的demo
完整的demo.png
主函数就是调用罢了。没什么好说的
看上面分了4个部分 Usage Arguments Options Examples 各个分析一下:
Options:
Options.png
指令 zhangTestArgument.py -qvrh 123.txt 里面的参数 是 -qvrh 下面是对参数的说明:
-h --help 这两个没什么卵区别,中间可以使 空格也可以是 逗号!如果是 长指令 前面是用 -- (例如 --help)
options2.png
这种还是纠结了一下:
-q 其实代表的是 --quite Sel 那么当我们执行 zhangTestArgument.py -q [FILE] 这个指令的时候 实际上相当于是 zhangTestArgument.py --quite Sel [FILE] 这样就是两个参数了~
Arguments:
Arguments.png
这里面是叙述的是上面的参数 后面跟着的是说明了这个参数的作用。(笔者看了看这块感觉除了说明一些是做什么的,好像没啥用了。)
Examples:
Examples.png
这就是告诉怎么用。。。
Usage:(Usage是声明指令怎么使用的部分,必须要写的,下面是重中之重)
Usage.png
zhangTestArgument.py 这个部分是名字 如指令 python3 XXXX -vf file.txt 其中的 XXXX 就是这
[-vqrh] 这个是参数位置 这里面的参数必须要在下面的 options 选项中声明. 这里面添加了 [] 这个是因为 这些参数是可选的,要是直接写成 -v 这样那么想执行这条指令必须写-v。其实可以写成 [-v][-q][-r][-h],这样也行,但是怪怪的。另外 如果参数是长参数 那么不能直接简写成 -vqrh 的形式 只能是 --help --file --nimei 这种形式。
[FILE] 这个是参数 加上[]作用同上。这个就像是 定义了一个 str变量一样。 可以给str 赋值 后期可以取出来。
注意到 ... 了吗? 这个的作用是让前面一个参数重复多次,最后以数组输出。没看懂没关系一会看看最后的输出就懂了。
(-left | -right) 这个()的作用是说这里面必须要选择一个 要么是 --right 要么是 --left,注意 带有()的是必须要选择的。
好了,现在按照上面的弄应该是能写出想要的指令了,然后去终端找到对应的文件之后执行一下指令吧。
执行之后.png
如果指令正确那么就能输出上面格式的内容了,这个是以一个字典的形式来输出的。后期可以根据字典里面的各个数据来分别处理各种情况了。
另外上面还提到了一个 ... 的问题 注意看看 上图中的 FILE 对应的是一个数组。所以 ... 的作用就是声明 [FILE] 是一个数组 所以 可以添加多个,输出的是数组。
后续:
1.只说明了基础的用法。
2.可能写的不是那么清晰。有不明白的可以留言。
3.点击这个是我自己写的 所有带 zhang 前缀的是我自己复写的,有对应的说明。
作者:韩大熊宝要姓张
链接:https://www.jianshu.com/p/9ae4cf88e552