Python argparse : Is there a way to specify a range in nargs?

标签 python argparse

我有一个支持参数列表的可选参数。

我的意思是,它应该支持:

  • -f 1 2
  • -f 1 2 3

但不是:

  • -f 1
  • -f 1 2 3 4

有没有办法在 argparse 中强制执行此操作?现在我使用 nargs="*",然后检查列表长度。

编辑: 根据要求,我需要的是能够定义一系列可接受的参数数量。我的意思是,说(在示例中)2 或 3 个 args 是正确的,但不是 1 或 4 或任何不在 2..3 范围内的东西

最佳答案

您可以使用 custom action 来执行此操作:

import argparse

def required_length(nmin,nmax):
    class RequiredLength(argparse.Action):
        def __call__(self, parser, args, values, option_string=None):
            if not nmin<=len(values)<=nmax:
                msg='argument "{f}" requires between {nmin} and {nmax} arguments'.format(
                    f=self.dest,nmin=nmin,nmax=nmax)
                raise argparse.ArgumentTypeError(msg)
            setattr(args, self.dest, values)
    return RequiredLength

parser=argparse.ArgumentParser(prog='PROG')
parser.add_argument('-f', nargs='+', action=required_length(2,3))

args=parser.parse_args('-f 1 2 3'.split())
print(args.f)
# ['1', '2', '3']

try:
    args=parser.parse_args('-f 1 2 3 4'.split())
    print(args)
except argparse.ArgumentTypeError as err:
    print(err)
# argument "f" requires between 2 and 3 arguments

关于Python argparse : Is there a way to specify a range in nargs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4194948/

相关文章:

python - 从 Unicode 字符串中正确提取表情符号

python - 如何在 argparse 中添加带有子解析器的可选位置参数?

python - 解析多个文件 argparse

python - 如何在Python中传递任意参数

python - argparse 中的条件可选标志

python - 如何从 python 脚本运行 Windows 命令行?

python - 如何更改具有特定 id 的 QMenuBar 的子 css 样式表?

python - LSTM 中的长期递归卷积网络论文复制错误?

python - QLabel 不会重新绘制像素图

python - 如何从用户获取文件路径然后传递给函数(argparse)