python如何实现像shell中的case功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python如何实现像shell中的case功能相关的知识,希望对你有一定的参考价值。

我们知道在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变量中。
长参数名的方式和短参数差不多,唯一的区别就是长参数如果要接收值,那必须得在后面加上一个"="

以上是关于python如何实现像shell中的case功能的主要内容,如果未能解决你的问题,请参考以下文章

Shell中的if和case判断语句

Shell中的if和case判断语句

Shell中的case命令

python用字典实现switch..case类似的函数调用

Appium python unittest pageobject如何实现加载多个case

shell中case语句程序传参while