我如何告诉 argparse 只允许参数一次?

How do I tell argparse to allow an argument only once?

如何告诉 argparse 我只想允许命令行参数一次?

import sys
import argparse

parser = argparse.ArgumentParser()
parser.add_argument(
    "--out",
    required=True,
)

parsed = parser.parse_args(sys.argv[1:])
print(f"out: {parsed.out}")

如果我这样调用这段代码:

python3 argparsetest.py --out 1 --out 2 --out 3

它打印

out: 3

但我宁愿它错误地告诉用户 --out 参数只能使用一次。

我查看了 nargs 选项,但上面说的是 --out 应该考虑多少个后续参数,而不是我可以通过 --out.[=19= 的频率]

有一个 required 选项强制用户提供参数(至少一次),但我正在寻找限制参数使用频率的上限,而不是下限.

我看过 Only one command line argument with argparse 但这是 2013 年的,我希望现在有更简单的方法来做到这一点。

如何限制命令行标志的使用次数?

跟进我的评论:

import sys
import argparse

# args = sys.argv[1:]

args = "--out 1 --out 2 --out 3".split()

print(f"Input args: {args}")


parser = argparse.ArgumentParser()
parser.add_argument(
    "--out",
    action="append",
    required=True,
)

parsed = vars(parser.parse_args(args))

for key, val in parsed.items():
    if isinstance(val, list):
        print(f"{key} specified {len(val)} times!")
        parsed[key] = val[0]  # or val[-1]

print(parsed)