Python argparse:有没有办法在 nargs 中指定范围?

2024-02-24

我有一个可选参数,它支持参数列表本身。

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

  • -f 1 2
  • -f 1 2 3

but not:

  • -f 1
  • -f 1 2 3 4

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

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


你可以用自定义动作 http://docs.python.org/library/argparse.html#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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python argparse:有没有办法在 nargs 中指定范围? 的相关文章

随机推荐

  • SDKMAN!不适用于 Eclipse.app 或 SpringToolSuite4.app(在 Mac 上)

    这是一个类似的问题 Eclipse找不到用sdkman安装的jdk https stackoverflow com questions 48248222 eclipse cant find jdk installed with sdkman
  • Prolog,在列表中找到最小值

    简而言之 如何找到列表中的最小值 感谢卡雷尔的建议 很长的故事 我在 amzi prolog 中创建了一个加权图 并给定 2 个节点 我能够检索路径列表 但是 我需要找到该路径中的最小值 但无法遍历列表来执行此操作 我可以就如何确定列表中的
  • 使用 Flask 作为文件上传的传递代理?

    它用于应用程序引擎的 blobstore 因为它的上传接口每次都会生成一个临时端点 我想消除前端的复杂性 Flask 会接受 post 请求并将其转发到 blobstore 指定的端点 性能和流量成本根本不是问题 有人可以推荐一种最直接的实
  • Array(x) 是一种什么样的 ruby​​ 方法调用

    以下内容的含义是什么 其语法的 Ruby 文档在哪里 Array phrases 我在此处浏览 Rails 源代码时发现 File actionpack lib action view helpers text helper rb line
  • 将代码从 MySQL 更改为 PDO

    我制作了一个使用 MySQL 语法编写的 CMS 脚本 我想用 PDO 语法替换 MySQL 语法 有人可以吗帮我做 and 向我解释一下该怎么做 这是脚本中的代码
  • 如何在 Xcode 7 中使用 xcodebuild 和手表扩展

    我们的命令以前是这样的 xcodebuild configuration Release target xxx sdk iphoneos9 0 scheme xxx archive 现在在 Xcode 7 中 我们收到此错误 Build s
  • 通过 Linux FrameBuffer 将像素绘制到屏幕

    最近 我被一个奇怪的想法所震惊 从 dev urandom 获取输入 将相关字符转换为随机整数 然后使用这些整数作为像素的 rgb x y 值来绘制到屏幕上 我做了一些研究 在 StackOverflow 和其他地方 许多人建议您可以直接写
  • 使用 iText 更改 PDF Producer 属性

    是否可以使用 iText 更改 PDF 文档的现有属性 我试过这个 Map
  • Google 登录错误 12500

    我正在尝试将 Google Sign In 集成到我的应用程序中 我没有后端服务器 我只是将登录的 Google 帐户的详细信息获取到我的应用程序 我首先尝试使用Google 登录示例 https github com googlesamp
  • 转义特殊字符 (ø, æ) 以在 url 内使用

    我尝试在 iOS 应用程序中显示带有 URL 源的图像 但它没有显示 图像的 url 是实时示例路径 使用以下 Objective C 代码转义该字符串时 NSString url NSString CFURLCreateStringByA
  • 检查指定名称的屏幕是否存在

    我制作了一个 bash 文件 它在独立的屏幕中启动另一个具有唯一名称的 bash 文件 我需要确保该内部 bash 文件的一个实例在任何一个时间点都在运行 为此 我希望在尝试创建父 bash 文件之前检查该名称的屏幕是否存在 有没有办法做到
  • 正则表达式 $1、$2 等

    我一直在尝试在 PHP 中进行一些正则表达式操作 但我在这方面不是很熟练 似乎当我在字符串上使用像 preg replace 这样的正则表达式函数时 我可以通过某种名为 1 2 等的变量访问正则表达式替换的字符串 这叫什么 我该如何使用它
  • 使 CSS 工具提示跟随光标

    我正在创建一个基于 CSS 的工具提示 该工具提示中将包含大量内容 而不是处于静态位置 我想知道是否有一种简单的方法可以使其在将鼠标悬停在链接上时跟随光标 这是基于 CSS 的工具提示示例 div class couponcode Firs
  • Flux/React Complex 可重复使用组件

    我想做这样的事情 var App React createClass render function return
  • 如何在Django中获取所有POST请求值?

    有没有办法从 Django 的请求中获取所有表单名称
  • 为什么 TextRenderer.MeasureText 无法正常工作?

    我想在给定一定宽度的可用画布的情况下测量文本的高度 我传入的文本非常长 我知道会换行 为此 我呼吁如下 using System Windows Forms string text Really really long text that
  • 如何在使用清单 v3 制作的 Chrome 扩展中使用 Web 套接字显示实时数据?

    我正在开发一个简单的扩展 我想在其中展示RealTime通过网络套接字连接从我的服务器发送的数据 我正在使用 chrome 的清单 v3 来实现这一点 我尝试通过网络套接字连接我的扩展background js它作为 Service Wor
  • std::map 键的要求(设计决策)

    当我做一个std map
  • 协调 CACurrentMediaTime() 和 deviceCurrentTime

    我正在尝试同步几个CABasicAnimations with AVAudioPlayer 我的问题是CABasicAnimation uses CACurrentMediaTime 作为安排动画时的参考点AVAudioPlayer use
  • Python argparse:有没有办法在 nargs 中指定范围?

    我有一个可选参数 它支持参数列表本身 我的意思是 它应该支持 f 1 2 f 1 2 3 but not f 1 f 1 2 3 4 有没有办法在 argparse 中强制执行此操作 现在我使用 nargs 然后检查列表长度 Edit 根据