python getopt函数详解

少于 1 分钟读完

getopt模块可以帮助脚本解析sys.argv的命令行参数,它遵守和Unix getopt()函数相同的约定,该模块提供两个函数和一个异常。

1. getopt.getopt(args, options[, long_options])

功能:解析命令选项和参数列表

args: 要解析的参数列表,传入命令行参数要传入sys.argv[1:]

options: 由打算获取的选项字母组成的字符串,要获得某个选项的值,需要在代表该选项的字母后加冒号’:’ 如 -a 1000 -b 123 -d onestraw.net 1)如果想获得3个选项的值,options=”a:b:d” 2)此时,不能只获得后面选项的值,如”abd:”,这样是错误的 3)但是可以只获得前面选项的值,如”a:bd”,也可以用”a:b”,但不能是”a:”

有一点和Unix GNU getopt()函数,一个非选项参数后面,所有的参数都被认为是非选项参数

options = “a:bd:”和options = “a:bd”效果一样,都得不到选项d的值

如果参数列表为 -a -b 123 -d onestraw.net 如果要获得选项a的值,它不会返回null, 会返回-b

>>> args = "-a 1000 -b 123 -d onestraw.net".split()
>>> args
['-a', '1000', '-b', '123', '-d', 'onestraw.net']
>>> getopt.getopt(args,'a:b:d:')
([('-a', '1000'), ('-b', '123'), ('-d', 'onestraw.net')], [])
>>> getopt.getopt(args,'a:bd:')
([('-a', '1000'), ('-b', '')], ['123', '-d', 'onestraw.net'])
>>> getopt.getopt(args,'a:bd')
([('-a', '1000'), ('-b', '')], ['123', '-d', 'onestraw.net'])
>>> getopt.getopt(args,'ab:d')
([('-a', '')], ['1000', '-b', '123', '-d', 'onestraw.net'])
>>>

long_options: 是getopt函数的可选参数,它必须是一个列表

如果命令行输入参数 –condition=send –srcIP=10.10.10.10 –dstIP=20.20.20.20 (等价于 –condition send –srcIP 10.10.10.10 –dstIP 20.20.20.20) 想要获得这三个长选项的值 long_options=[“condition=”,”srcIP=”,”dstIP=”] (注意,不需要写’–’,但要写上’=’)

long_options会根据前缀最大匹配原则搜索参数列表,也就是说有时候在命令行中选项输入不完整也能正常传入参数 假设选项只有3个,输入 –condition=send –srcIP=10.10.10.10 –dstIP=20.20.20.20 和输入 –c=send –s=10.10.10.10 –d=20.20.20.20

使用 long_options=[“condition=”,”srcIP=”,”dstIP=”]得到的结果一样 (但是当结果不唯一时,就会报错,小心使用)

>>> largs="--c=send --s=10.10.10.10 --d=20.20.20.20".split()
>>> getopt.getopt(largs,'',["condition=","srcIP=","dstIP="])
([('--condition', 'send'), ('--srcIP', '10.10.10.10'), ('--dstIP', '20.20.20.20')], [])
>>>

返回值: getopt()函数的返回值是一个元组,包括两个list,第一个list是根据选项得到的如(option, value)这样的结果,第二个list是参数列表args解析剩余的部分

2. getopt.gnu_getopt(args, options[, long_options])

它和上面的getopt()一样,除去限制:一个非选项参数后面,所有的参数都被认为是非选项参数

3. exception getopt.GetoptError

当getopt()函数执行出错时,就会抛出该异常。

4. exception getopt.error

GetoptError的别名,为了向后兼容。

参考http://docs.python.org/2/library/getopt.html

标签:

分类:

更新时间:

留下评论