实现命令行程序的互斥参数

2020年2月3日 / 4次阅读 / Last Modified 2020年2月3日
argparse模块

使用python的argparse模块提供的接口,可以轻松实现命令行程序的互斥参数。所谓互斥参数,就是在某几个参数中,用户只能在其中选择一个。

直接上代码:

def main():
    parser = argparse.ArgumentParser()
    timeType = parser.add_mutually_exclusive_group(required=True)
    timeType.add_argument('--day', type=int, 
            help='keep the last x days files')
    timeType.add_argument('--month', type=int, 
            help='keep the last x months files')
    timeType.add_argument('--year', type=int, 
            help='keep the last x years files')
    args = parser.parse_args()


if __name__ == '__main__':
    main()

通过ArgumentParser对象的add_mutually_exclusive_group函数,定义一个group,以上代码这个group的名称是timeType。然后在这个group中再通过add_argument函数增加具体的命令行参数,凡是在这个timeType中增加的命令行参数,相互直接就是互斥参数!即--day,--month和--year这三个参数,只能同时在命令行中存在一个。

$ python3.8 keepy.py -h
usage: keepy.py [-h] (--day DAY | --month MONTH | --year YEAR)

optional arguments:
  -h, --help     show this help message and exit
  --day DAY      keep the last x days files
  --month MONTH  keep the last x months files
  --year YEAR    keep the last x years files

usage部分的信息,--day,--month和--year是用括号括起来的,这就表示是3选1,小括号是必选!再看看运行效果:

$ python3.8 keepy.py --day 1 --month 2 --year 3
usage: keepy.py [-h] (--day DAY | --month MONTH | --year YEAR)
keepy.py: error: argument --month: not allowed with argument --day
$ python3.8 keepy.py --day 1 --year 3
usage: keepy.py [-h] (--day DAY | --month MONTH | --year YEAR)
keepy.py: error: argument --year: not allowed with argument --day
$ python3.8 keepy.py --day 1 
$ python3.8 keepy.py --month 1 
$ python3.8 keepy.py --year 1 
$ 

以上运行效果,实现了命令行参数的互斥。

我们还可以去掉 add_mutually_exclusive_group函数 的required=True,这样的话,含有3个互斥参数的group,就整体成为了一个可选的group,也就是说,这3个互斥的参数,1个都可以不用输入。这个效果也是很有用的。

-- EOF --

本文链接:https://www.pynote.net/archives/1781

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top