您的位置:首页 > 运维架构

使用getopt解析命令行参数

2016-10-12 15:17 691 查看
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选项后面的选项当做了参数值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python