【问题标题】:Argparse optional args override positionalargparse 可选参数覆盖位置
【发布时间】:2018-02-20 08:19:57
【问题描述】:

我正在想办法让 argparse 位置参数与可选参数互斥。

例如:

./adder 20 32
Output: 52
./adder --interactive
adder>

现在,如果我只是尝试“--interactive”,它会告诉我我缺少位置参数。

示例代码:

parser = argparse.ArgumentParser()
parser.add_argument('a', metavar='First')
parser.add_argument('b', metavar='Second')
parser.add_argument('--interactive')
parser.parse_args()

我想知道是否有一种优雅的方法可以做到这一点(最好使用 argparse 功能),以便“--interactive”禁用使用两个位置参数的要求。

【问题讨论】:

  • 我们可以看到您指定参数等的实际代码吗?
  • 刚刚添加的示例代码
  • 你试过add_argument('parms', nargs='*')吗?参数被收集到一个列表中,如果位置参数不存在,则列表为空。
  • mutual_exclusive_group 机制 docs.python.org/3/library/argparse.html#mutual-exclusion 接受“可选”(?或 *)位置参数

标签: python argparse


【解决方案1】:

通常不能省略位置参数。您可以尝试nargs='*' 作为替代方案。

parser = argparse.ArgumentParser()
parser.add_argument('ab', nargs='*', type='int')
parser.add_argument('--interactive', action='store_true')
args = parser.parse_args()

使用列表args.ab 存储位置参数。如果省略,则args.ab 将是一个空列表。

【讨论】:

    猜你喜欢
    • 2011-05-27
    • 2019-04-13
    • 2014-12-29
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    相关资源
    最近更新 更多