argparse常见问题 - 互斥参数
问题
--items
和--all-items
必有其一:required
参数
--items
可以指定1个或者多个item:nargs
参数--items
不要硬编码:用list间接指定--items
忽略大小写:用type
参数直接转换为小写--all-items
对应boolean数据:用action
参数实现出现即为True
,缺席为False
--all-items
用--items
的default
参数实现all-items
为True
选择全部items
实现
items = [
'audio',
'video',
'network',
]
parser = argparse.ArgumentParser()
items_group = parser.add_mutually_exclusive_group(required=True)
items_group.add_argument('--items', nargs='+', type=str.lower,
choices=items, default=items,
help='available items: ' + ', '.join(items))
items_group.add_argument('--all-items', action='store_true',
default=False, help='all items')
args = parser.parse_args()
print(args)
测试一下
我不写expect了,读者自己想想UT怎么写,然后动手测试一下:
- 测试用例:没有参数
- 测试用例:两个参数
--items audio --all-items
- 测试用例:1个参数
--all-items
- 测试用例:1个item参数
--items audio
- 测试用例:2个item参数
--items audio video
- 测试用例:3个item参数
--items audio video network
- 测试用例:item参数的大小写
--items audio Video NETWORK
- 测试用例:不合法的item参数
--items invallable_item
- 测试用例:不合法的item参数
--items audio invallable_item
好,先到这里。