我们知道在shell脚本里是支持case语句,当位置参数为空时,会提示我们怎么使用脚本
那么在python怎么实现呢?也使用case吗?
python里不支持case语句,但是也有实现case的方法。
这里我们来讲讲getopt模块
介绍说是解析命令行操作
下面是getopt格式:
getopt.getopt(args, shortopts, longopts=[])
args指的是当前脚本接收的参数,它是一个列表,可以通过sys.argv获得
shortopts 是短参数 啥是短参数啊? 类似于 这样:python test.py -h # 输出帮助信息
longopts 是长参数 啥是长参数啊? 类似于 这样:python test.py -help # 输出帮助信息
返回值
这个函数返回是一个两元组的列表(复习一下,元组的值是不可修改的!)
下面我写一个小例子,让你稍微顿悟一下
import getopt import sys arg = getopt.getopt(sys.argv[1:],‘-h‘,[‘help‘]) print(arg)
结果如下:
[email protected]:~/python# python3.5 test.py -h ([(‘-h‘, ‘‘)], []) [email protected]:~/python# python3.5 test.py --help ([(‘--help‘, ‘‘)], [])
可以看到已经接收了参数。并且做了处理,为啥我传入sys.argv[1:]?
因为sys.argv里的argv[0]是当前脚本的文件名,不需要它去参与,要不然你的选项和选项值无法匹配,问题多多。
假设我要接收一个参数+参数值的选项怎么办?
再写个小例子!
1 #!/usr/bin/env python3.5 2 import urllib.request 3 import getopt 4 import sys 5 6 opts,args = getopt.getopt(sys.argv[1:],‘-h-f:-v‘,[‘help‘,‘filename=‘,‘version‘]) 7 for opt_name,opt_value in opts: 8 if opt_name in (‘-h‘,‘--help‘): 9 print("[*] Help info") 10 exit() 11 if opt_name in (‘-v‘,‘--version‘): 12 print("[*] Version is 0.01 ") 13 exit() 14 if opt_name in (‘-f‘,‘--filename‘): 15 fileName = opt_value 16 print("[*] Filename is ",fileName) 17 # do something 18 exit()
运行测试结果如下:
[email protected]:~/python# python3.5 test.py --filename=test [*] Filename is test [email protected]:~/python# python3.5 test.py --filename= [*] Filename is [email protected]:~/python# python3.5 test.py --help [*] Help info [email protected]:~/python# python3.5 test.py --version [*] Version is 0.01 [email protected]:~/python# python3.5 test.py -v [*] Version is 0.01 [email protected]:~/python# python3.5 test.py -f test [*] Filename is test [email protected]:~/python#
来详细解释一下这几行代码
首先从短参数名开始。
我定义了‘-h-f:-v‘ 大家发现没有,在-f后面多了一个":"
这个":"代表了当前参数是有值的,是一个参数名+参数值的参数
如果我再加一个-o: 那么证明-o后面是可以接收一个值,这个值就是-o的参数值,将会保存到opts变量中。
长参数名的方式和短参数差不多,唯一的区别就是长参数如果要接收值,那必须得在后面加上一个"="
时间: 2024-11-13 13:10:33