多个argparser命令,每个命令都具有互斥组

时间:2017-08-06 09:24:31

标签: python

我希望能够解析多个参数,每个参数都是互斥组。

我试过了:

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()

# week
week_parser = subparsers.add_parser('week', help = 'input type for week')
week_group = week_parser.add_mutually_exclusive_group(required = True)
week_group.add_argument('--list', '-l', help = '"1 2 3 4"')
week_group.add_argument('--single', '-s', help = '25')
week_group.add_argument('--range', '-r', help = '1:10')

# year
year_parser = subparsers.add_parser('year', help = 'input type for year')
year_group = year_parser.add_mutually_exclusive_group(required = True)
year_group.add_argument('--list', '-l', help = '"2016 2017"')
year_group.add_argument('--single', '-s', help = '2017')
year_group.add_argument('--range', '-r', help = '2015:2017')

args = vars(parser.parse_args())

我想做点什么:

python program.py week -s 25 year -l "2016 2017"

谢谢。

1 个答案:

答案 0 :(得分:0)

子命令方法不起作用,因为解析器期望在给定命令行上只找到一个子命令。毫无疑问,你可以修改这种行为,但我怀疑它会涉及不成比例的工作量。

您可能需要满足以下其中一种选择:(1)消除您的论点名称的歧义:

python program.py --week-single 25 --year-list "2016 2017"

或(2)定义--week--year接受字符串并自行解析和验证:

python program.py --week 25 --year "2016 2017"