190525-Python之命令行参数解析getopt使用说明

文章目录
  1. I. 实战教学
    1. 1. 获取请求参数
    2. 2. 命令行参数方式
    3. 3. getopt使用说明
    4. 4. 小结
  2. II. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注

请求参数解析属于比较常见和基础的操作技能了,如果希望我们的脚本可以在启动时,传入一些参数,来实现不同的环境指定,条件判断等,可以怎么处理呢?

本篇将介绍在python中,如何优雅的使用getopt,来解析我们的命令行参数

I. 实战教学

1. 获取请求参数

在解析参数之前就需要获取参数,这里主要借助的就是 sys.argv

1
2
3
4
import sys

# 获取请求参数,为什么不要第一个?因为执行一般都是 python xxx.py,所以第一个参数没啥特别的意义
arguments = sys.argv[1:]

2. 命令行参数方式

熟悉linux的同学可能知道,我们常用的命令行参数有两种姿势,长类型和短类型

如我们查看一下ls的帮助,输出如下

看上面红框里面的,-a 表示短参, –all 表示长参

参数后面可以紧跟值,可以用空格也可以用=,如

短参数使用示例

1
2
3
# 查看文件占用磁盘空间,下面两种姿势都可以,但是不能用=
du -d 1
du -d1

长参数使示例

1
2
3
# 下面两种姿势都可以,但是1不能紧挨长参数
du --max-depth 1
du --max-depth=1

3. getopt使用说明

使用getopt,需要指定短参和长参数

说明 短参 长参
类型 str list
格式 形如: het 形如: ['help', 'env', 'thread']
有value 短参后+冒号, 如 e:, 使用时必须给参数值 长参数名+等号,如 env=, 使用时必须给参数值

实例说明,我们的python脚本接收两个参数,一个 -p 不要value(存在这个参数表示http请求走代理,否则不走代理),一个 -e 需要value(指定环境,如dev为开发,pro为生产)

所以我们的参数解析可以为

1
2
3
4
5
shortargs = 'pe:'
longargs = ['env=', 'proxy']

opts, args = getopt.getopt(sys.argv[1:], shortargs, longargs)
print(opts, '---split------', args)

上面定义了两个参数,所以我们的测试命令可以为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 开发环境,走代理
python ArgumentParse.py --env=dev -p
python ArgumentParse.py --env dev -p
python ArgumentParse.py -edev -p
python ArgumentParse.py -e dev -p

# 开发环境,不走代理
python ArgumentParse.py --env=dev

# 两个参数都不传
python ArgumentParse.py

# env不传值
python ArgumentParse.py --env

# p 传值
python ArgumentParse.py --proxy=test

# 传入一个未定义的参数
python ArgumentParse.py -a


从上面的输出可以得知

  • 要求有值的参数,命令行待这个参数时,必须有值
  • 要求没值的参数,命令行待这个参数时,必须没值
  • 不能传入没有定义的参数
  • 返回元组,第一个为解析后的参数列表,第二个为剩下的命令行参数(就是不是-开头)

4. 小结

上面的使用比较简单,定义短,长参数,其中短参数如果必须要有值,加一个冒号;长参数必须有值,加一个等号

虽然实现了简单参数解析,但是功能并不够强大

  • 要求参数必须存在时,需要自己额外处理
  • 最常见的 -h --help,输出参数使用说明,也需要自己额外定制
  • 参数值校验,需要额外处理

那么有没有更强大的参数解析方式呢?

敬请期待,下一篇的《optparser实现更强大的命令行参数解析》

II. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals

# Python

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×