Python argparse是否支持多个独占参数?

Python argparse是否支持多个独占参数?,python,argparse,Python,Argparse,假设我有两组论点。可以使用每个组中任意数量的参数,但不能在组之间混合使用参数 在argparse模块中是否有自定义冲突参数的方法?我尝试过使用方法添加互斥组,但这不是我想要的。我提出了一个补丁(或者更确切地说是补丁),可以让你测试参数的一般逻辑组合http://bugs.python.org/issue11588 我的想法的核心是在parse_args中添加一个钩子,让用户测试所有逻辑参数组合。此时,它可以访问列表seen参数。在parse_args之外,此列表不可用(因此需要一个钩子)。但是使

假设我有两组论点。可以使用每个组中任意数量的参数,但不能在组之间混合使用参数

argparse
模块中是否有自定义冲突参数的方法?我尝试过使用方法
添加互斥组
,但这不是我想要的。

我提出了一个补丁(或者更确切地说是补丁),可以让你测试参数的一般逻辑组合<代码>http://bugs.python.org/issue11588

我的想法的核心是在
parse_args
中添加一个钩子,让用户测试所有逻辑参数组合。此时,它可以访问列表
seen
参数。在
parse_args
之外,此列表不可用(因此需要一个钩子)。但是使用适当的
默认值
,您可以编写自己的测试,使用
args
名称空间

实现通用
argparse
版本的困难包括:

a) 实现某种嵌套组(在您的案例中,多个
any
组嵌套在
xor
组中)

b) 在有意义的
用法
行中显示这些组

目前,您最好的选择是使用子parser实现您的问题(如果合适的话),或者在解析后进行您自己的测试。并编写自己的
用法

下面是一个可以在解析后应用于
args
名称空间的通用测试的草图

def present(a):
    # test whether an argument is 'present' or not
    # simple case, just check whether it is the default None or not
    if a is not None:
        return True
    else:
        return False

# sample namespace from parser
args = argparse.Namespace(x1='one',x2=None,y1=None,y2=3)

# a nested list defining the argument groups that need to be tested
groups=[[args.x1,args.x2],[args.y1,args.y2]]

# a test that applies 'any' test to the inner group
# and returns the number of groups that are 'present'
[any(present(a) for a in g) for g in groups].count(True)
如果
计数
为0,则未找到任何组,如果
1
已找到一个组,等等。我在错误问题中提到的
钩子
执行相同类型的测试,只是使用不同的
呈现
测试

如果计数
>1
,则正常的
互斥测试将被拒绝。所需的组将反对
0
,等等。您还可以执行以下操作

if (present(args.x1) or present(args.x2)) and 
   (present(args.y1) or present(args.y2)): 
   parser.error('too many groups')

即,
任何
所有
的某些组合。但是
count
是处理
xor
条件的好方法。

No,argparse不支持开箱即用的用例。您必须单独检查。是否有一个模块可以这样做?我不知道,对不起。@user3056783:我从未使用过,但文档看起来很有希望:请提供一组示例选项,以澄清为什么
添加互斥组
不适合您的需要。我怀疑您正朝着需要子解析器的方向前进