argparse,两个参数相互依赖

时间:2013-06-06 16:51:10

标签: python argparse

我想使解析器像cmd [-a xxx -b xxx] -c xxx -d xxx

使用-a时,我也希望-b使用-b。同样,如果使用-a,则必须使用-a。没有使用-b和{{1}}都可以。

我该怎么做?我尝试过自定义操作,但效果不佳。

2 个答案:

答案 0 :(得分:10)

更好的设计是拥有一个带有两个参数的选项:

parser.add_argument('-a', nargs=2)

然后你要么指定带有2个参数的选项,要么根本不指定它。

$ script -a 1 2

$ script

自定义操作(或后处理)可以将元组args.a拆分为两个单独的值args.aargs.b

答案 1 :(得分:9)

Argparse本身并不支持此类用途。

最有效的方法是检查并查看解析后是否满足这些类型的条件:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-b')
parser.add_argument('-c')

args = parser.parse_args()

required_together = ('b','c')

# args.b will be None if b is not provided
if not all([getattr(args,x) for x in required_together]):
    raise RuntimeError("Cannot supply -c without -b")