python的getopt库介绍
在使用c或者c++时我们有时会使用命令行将参数(选项)传入,而当程序跑在vs2017系列的IDE上时,可以在设置选项里直接模拟掉通过命令行启动程序,并输入参数(选项)这一行为。有时这是必须且十分有用的,而在python中自然少不了自己的命令行参数(选项)管理库了。目前来说,参数主要有两种输入格式,即含有短选项和长选项两种选项格式。
短选项格式:
短选项格式为“-”加上单个字母选项;
长选项格式:
长选项格式为“–”加上一个单词。
长选项格式主要是在linux下引入的,但是现在许多linux程序是可以同时支持这两种格式的。而在python中通过getopt库实现同时支持这两种用法的单词,而且操作简单,就个人观点而言,在windows下还是喜欢使用短选项格式。
getopt的函数方法
- getopt.getopt函数
- getopt.gnu_getopt
其中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)
所获得的输出信息如下
root@Kali:~/python# python3.5 test.py -h
([('-h', '')], [])
root@Kali:~/python# python3.5 test.py --help
([('--help', '')], [])
root@Kali:~/python#
常见的传入参数时,都会舍弃第一个参数,即从sys.argv[1]开始,这是因为无论是c/c++还是sys.argv
的第一个元素都是当前文件或者脚本的文件名,这是并不是getopt所期望的。
当一个选项只是表示开关状态时,即后面不带附加参数时,在分析串中写入选项字符。当选项后面是带一个附加参数时,在分析串中写入选项字符同时后面加一个":" 号 。
例如下面的代码所示:
try:
options, argv = getopt.getopt(sys.argv[1:], "c:b:")
except getopt.GetoptError:
sys.exit()
# 根据命令行的参数内容,调整字典中键值对应的value
for option, value in options:
if option in ("-c", "--comname"):
test_param['com'] = value
print("com: {0}".format(test_param['com']))
if option in ("-b", "--baudrate"):
test_param['baudrate'] = value
print("baudate : {0}".format(test_param['baudrate']))
option与value:
- options为分析出的格式信息。argv 为不属于格式信息的剩余的命令行参数。
- option 是一个两元组的列表。每个元素为:( 选项串, 附加参数) 。如果没有附加参数则为空串’’