【问题标题】:Require either of two arguments using argparse需要使用 argparse 的两个参数之一
【发布时间】:2021-12-18 20:11:57
【问题描述】:

给定:

import argparse

pa = argparse.ArgumentParser()
pa.add_argument('--foo')
pa.add_argument('--bar')

print pa.parse_args('--foo 1'.split())

我该怎么做

  • 至少强制要求“foo, bar”之一:--foo x--bar y--foo x --bar y 都可以
  • 强制设置最多一个“foo, bar”:--foo x--bar y 可以,--foo x --bar y 不行

【问题讨论】:

标签: python argparse


【解决方案1】:

我认为您正在搜索类似 mutual exclusion 的内容(至少对于您问题的第二部分)。

这样,只会接受 foo 或 bar,而不是两者。

import argparse

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--foo',action=.....)
group.add_argument('--bar',action=.....)
args = parser.parse_args()

顺便说一句,刚刚发现another question指的是同类型的问题。

【讨论】:

  • @jlengrand 在我意识到它实际上解决了问题中提出的两个条件(基本上是XOR)之后,您的回答仍然对我有用。我最初担心的是你的问题只解决了这两个条件之一。
  • 感谢您的反馈。我有一个想法,它确实解决了所有问题,但不再确定:D。我会相应地编辑答案!
【解决方案2】:

如果您需要一些模块未提供的检查,您可以随时手动进行:

pa = argparse.ArgumentParser()
...
args = pa.parse_args()

if args.foo is None and args.bar is None:
   pa.error("at least one of --foo and --bar required")

【讨论】:

  • 有一个open issue 提议改进 argparse 以包含不同类型的使用测试组
猜你喜欢
  • 2012-06-24
  • 2011-10-07
  • 2020-05-23
  • 2018-08-28
  • 2013-04-12
  • 1970-01-01
  • 2016-05-01
  • 2021-07-07
  • 2020-07-18
相关资源
最近更新 更多