python中可以使用getopt来解析命令行参数,其定义如下:
getopt(args, shortopts, longopts=[])
其中,
- args是要解析的参数列表
- shortopts是短选项字符串(短选项,以-开头的选项,例如-a, -abc)
- longopts是长选项列表(长选项,以--开头的选项,例如--x, --xyz)
getopt返回opts, args元组,opts是根据shortopts, longopts参数解析出来的(key, value)列表,
而其他剩余参数就会放到args列表中。
举例最直观:
>>> opts, args = getopt.getopt(['-a', '-b', '--xyz'], 'ab', ['xyz'])
>>> print(opts)
[('-a', ''), ('-b', ''), ('--xyz', '')]
>>> print(args)
[]
可以看到,所有解析出来的选项value都是空。
如果要告诉getopt选项有参数值,需要在shortopts, longopts中指定。
>>> opts, args = getopt.getopt(['-a', '111', '-b', '--xyz', '222'], 'a:b', ['xyz='])
>>> print(opts)
[('-a', '111'), ('-b', ''), ('--xyz', '222')]
>>> print(args)
[]
通过在短选项字符后添加冒号:,长选项字符串后添加等号=,以告知getopt相应选项后会有参数值。
参数值还可以与选项写在一起。
>>> opts, args = getopt.getopt(['-a111', '-b', '--xyz=222'], 'a:b', ['xyz='])
>>> print(opts)
[('-a', '111'), ('-b', ''), ('--xyz', '222')]
参数列表末尾不以-开头的选项,都会放到args中。
>>> opts, args = getopt.getopt(['-a', '-b', '--xyz', '111', '222'], 'ab', ['xyz'])
>>> print(args)
['111', '222']
注意有参数值和没有参数值的选项设置不要弄错,不然解析出来的结果就会出现错乱。
>>> opts, args = getopt.getopt(['-a', '-b'], 'a:b')
>>> print(opts)
[('-a', '-b')]
>>> opts, args = getopt.getopt(['-a', '-b', '--xyz'], 'ab:')
>>> print(opts)
[('-a', ''), ('-b', '--xyz')]
如上,由于指定了a/b选项有参数值,getopt就把-a/-b选项后面的选项当做了参数值。