argparse(python)是否支持互斥的参数组?

argparse(python)是否支持互斥的参数组?,第1张

argparse(python)是否支持互斥的参数组?

编辑
:没关系。因为

argparse
调用时必须创建一个选项,这是一个可怕的选择
group.add_argument
。那不是我的设计选择。如果您迫切需要此功能,可以尝试使用ConflictsOptionParser来实现:

# exclusivegroups.pyimport conflictsparseparser = conflictsparse.ConflictsOptionParser()a_opt = parser.add_option('-a')b_opt = parser.add_option('-b')c_opt = parser.add_option('-c')d_opt = parser.add_option('-d')import itertoolscompatible_opts1 = (a_opt, b_opt)compatible_opts2 = (c_opt, d_opt)exclusives = itertools.product(compatible_opts1, compatible_opts2)for exclusive_grp in exclusives:    parser.register_conflict(exclusive_grp)opts, args = parser.parse_args()print "opts: ", optsprint "args: ", args

因此,当我们调用它时,我们可以看到我们获得了预期的效果。

$ python exclusivegroups.py -a 1 -b 2opts:  {'a': '1', 'c': None, 'b': '2', 'd': None}args:  []$ python exclusivegroups.py -c 3 -d 2opts:  {'a': None, 'c': '3', 'b': None, 'd': '2'}args:  []$ python exclusivegroups.py -a 1 -b 2 -c 3Usage: exclusivegroups.py [options]exclusivegroups.py: error: -b, -c are incompatible options.

警告消息不会告知您两者,

'-a'
并且与
'-b'
不兼容
'-c'
,但是可以制作更合适的错误消息。以下是较旧的错误答案。

较旧的编辑:
_[此编辑是错误的,尽管如果以

argparse
这种方式进行工作,这不是一个完美的世界吗?]_我以前的回答实际上是不正确的,您应该可以通过为
argparse
每个互斥选项指定一个组来做到这一点。我们甚至可以
itertools
用来概括该过程。并确保我们不必显式地键入所有组合:

import itertoolscompatible_opts1 = ('-a', '-b')compatible_opts2 = ('-c', '-d')exclusives = itertools.product(compatible_opts1, compatible_opts2)for exclusive_grp in exclusives:    group = parser.add_mutually_exclusive_group()    group.add_argument(exclusive_grp[0])    group.add_argument(exclusive_grp[1])


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5639847.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存