请求参数解析属于比较常见和基础的操作技能了,如果希望我们的脚本可以在启动时,传入一些参数,来实现不同的环境指定,条件判断等,可以怎么处理呢?
本篇将介绍在python中,如何优雅的使用getopt,来解析我们的命令行参数
I. 实战教学
1. 获取请求参数
在解析参数之前就需要获取参数,这里主要借助的就是 sys.argv
1 | import sys |
2. 命令行参数方式
熟悉linux的同学可能知道,我们常用的命令行参数有两种姿势,长类型和短类型
如我们查看一下ls的帮助,输出如下
看上面红框里面的,-a 表示短参, –all 表示长参
参数后面可以紧跟值,可以用空格也可以用=
,如
短参数使用示例
1 | # 查看文件占用磁盘空间,下面两种姿势都可以,但是不能用= |
长参数使示例
1 | # 下面两种姿势都可以,但是1不能紧挨长参数 |
3. getopt使用说明
使用getopt,需要指定短参和长参数
说明 | 短参 | 长参 |
---|---|---|
类型 | str | list |
格式 | 形如: het |
形如: ['help', 'env', 'thread'] |
有value | 短参后+冒号, 如 e: , 使用时必须给参数值 |
长参数名+等号,如 env= , 使用时必须给参数值 |
实例说明,我们的python脚本接收两个参数,一个 -p 不要value(存在这个参数表示http请求走代理,否则不走代理),一个 -e 需要value(指定环境,如dev为开发,pro为生产)
所以我们的参数解析可以为
1 | shortargs = 'pe:' |
上面定义了两个参数,所以我们的测试命令可以为
1 | # 开发环境,走代理 |
从上面的输出可以得知
- 要求有值的参数,命令行待这个参数时,必须有值
- 要求没值的参数,命令行待这个参数时,必须没值
- 不能传入没有定义的参数
- 返回元组,第一个为解析后的参数列表,第二个为剩下的命令行参数(就是不是
-
开头)
4. 小结
上面的使用比较简单,定义短,长参数,其中短参数如果必须要有值,加一个冒号;长参数必须有值,加一个等号
虽然实现了简单参数解析,但是功能并不够强大
- 要求参数必须存在时,需要自己额外处理
- 最常见的
-h
--help
,输出参数使用说明,也需要自己额外定制 - 参数值校验,需要额外处理
那么有没有更强大的参数解析方式呢?
敬请期待,下一篇的《optparser实现更强大的命令行参数解析》
II. 其他
1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
2. 声明
尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
3. 扫描关注
一灰灰blog
知识星球