带有子解析器和可选位置参数的 Python argparse

2023-12-08

我想要一个带有子解析器的程序,它可以处理特定的参数,同时还为之前的解析器保留一些位置和可选参数(事实上,我真正想要的只是一个选项,我的意思是,一个有效的子解析器或一个有效的本地参数)。

我希望拥有的东西的例子:Program [{sectionName [{a,b}]}] [{c,d}]。如果提供了sectionName,则c/d不兼容,反之亦然。

然而,我能做到的最好的就是这个test.py [-h] {sectionName} ... [{c,d}]。这意味着,argparse 不允许我在未指定有效的情况下使用位置参数 c 或 dsectionName.

这是代码:

import argparse

mainparser = argparse.ArgumentParser()
# Subparser
subparser = mainparser.add_subparsers(title="section", required=False)
subparser_parser = subparser.add_parser("sectionName")
subparser_parser.add_argument("attribute", choices=['a', 'b'], nargs='?')
# Main parser positional and optional attributes
mainparser.add_argument("attribute", choices=['c', 'd'], nargs='?')

mainparser.parse_args()

我对此感到疯狂。任何帮助将非常感激!

编辑:我正在使用Python 3.8


The subparser对象实际上是一个位置Action,一个需要choices- 在这种情况下{'sectionName'}. positinal参数按照定义的顺序填充,使用nargs分配字符串的模式。

一旦主解析器获取“sectionName”,它将解析传递给subparser_parser。 Than 处理其余的输入,例如{'a','b'}位置性的。它无法处理的任何内容都会被放入“无法识别”列表中,然后控制权返回main进行最终处理。main不做任何进一步的参数处理。因此你的attribute参数被忽略。

你可以定义一个attribute之前的位置add_subparsers,但我不会尝试做到这一点nargs='?'.

所以最好定义所有main子解析器之前的参数,并使用optionals。这将提供最干净、最可靠的解析。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有子解析器和可选位置参数的 Python argparse 的相关文章

随机推荐

  • 如何检测 CMake 中的意外函数覆盖?

    我刚刚在我的 CMake 代码中发现了复制和粘贴错误 function name do something endfunction function name do something else endfunction 我已经多次复制 重命
  • SKLabelNode 将消失但仍然可点击

    我正在使用 SpriteKit 和 Swift 制作一个游戏 运行 Xcode 6 我有一个SKLabelNode 我们称之为myLabelNode对于这个例子 当我打电话时myLabelNode removeFromParent 它会像它
  • C# StreamReader 从标签输入文件?

    我一直在使用StreamReader inputFile代码来自ListBox它效果很好 但是 我想输入来自 txt文件到一个Label盒子代替 这可能吗 这是我尝试过的代码 它给了我一个错误描述 说明 Use of unassigned
  • 如何为 UIPageViewControllerDataSource 提供默认实现?

    我认为这个问题的答案通常会解决 Objective C 协议的问题 但这是我遇到的第一个问题 我希望在实施时使用这些方法UIPageViewControllerDataSourceWithConnections import UIKit p
  • 是否有*任何*情况下“for _ in [1,2,3]”根本不会循环?

    我正在编写一些代码并犯了一个错误 该错误简化为 func f gt Int for in 1 2 3 return 1 编译器向我显示一个错误 指出f缺少回报 这让我意识到我的错误 我忘记在周围放置一个 if 语句return 但后来我意识
  • python 多处理队列实现

    我无法理解如何将队列实现到下面的多处理示例中 基本上 我希望代码能够 1 产生2个进程 完成 2 将我的 id list 分成两部分 完成 3 让每个进程迭代列表 打印出每个项目 并且仅在完成列表后才关闭 我知道我必须实现某种类型的排队系统
  • 如何使用ajax从html获取数据并将数据传递到php

    您好 我很想知道如何将字符串从表单传递到 php 该 php 将测试其中是否有内容 然后使用此表单发布一条警报消息 尝试从中获取数据 然后显示它是否已通过正确 HTML 代码
  • 在 Android 中使用 NanoHTTPD

    我正在尝试使用 NanoHTTP 来提供 HTML 文件 然而 NanoHTTP 相对来说没有文档记录 而且我对 Android 还很陌生 我的问题是 我在哪里存储 html 文件 以及如何使用 NanoHTTP 提供它 答案很晚 但可能对
  • 如何从 Java 9+ 中的目录动态加载模块

    我一直在开发一个带有基于插件的系统的软件 用户可以在其中编写自己的插件 我对 JMPS 很陌生 但我想使用 JMPS 而不是 OSGi 来实现这一点 制作了一个单独的 API 模块 甚至创建了一个测试插件 插件以文件名 someplugin
  • UTC_TIMESTAMP() 是否受夏令时影响?

    我正在编写一个具有时段预订系统的应用程序 用户可以位于不同的时区 因此我需要以 UTC 时间将值存储在数据库中 我想知道如何UTC TIMESTAMP 是在MySQL中计算的 可靠吗 如果服务器时区位于夏令时地区UTC TIMESTAMP
  • Laravel 多文件上传验证

    我目前正在以一种形式工作 我在多个文件上传验证方面遇到一些问题 我的表单中只有一个字段允许上传多个文件
  • 如何在 pyplot 中的分组条形图中标记组?

    我想在 pyplot 中做类似以下的事情 我也可以在其中标记条形图和组 我能够标记条形 但不知道如何标记组 谢谢 默认的Seaborn 条形图会创造一个传说来显示岁月 import numpy as np import pandas as
  • C# - httpWebRequest 流的大小是否有限制?

    我正在尝试构建一个应用程序 使用 httpwebrequests 从自定义网络服务器下载一个小二进制文件 20 25 KB 这是服务器端代码 Stream UpdateRequest context Request InputStream
  • 从 HEVC 参考软件获取一些信息

    我是 HEVC 新手 现在正在了解参考软件 现在正在研究帧内预测 编码后我需要获取如下信息 给定 CTU 的 CU 结构 对于计算期间的每个 CU 它是信息 例如 QP 值 选择的亮度模式 选择的色度模式 CU 是否处于 CTU 分割决策的
  • 如何从我不拥有的画布中获取像素数据?

    我正在尝试从画布获取像素 RGBA 数据以进行进一步处理 我认为画布实际上是一个 Unity 游戏 如果这有什么不同的话 我正在尝试用游戏的画布来做到这一点颤抖和坐立不安 我用读取像素方法从context 这是我尝试过的 var examp
  • 我可以像在asp.net core mvc中一样使用service在blazor中操作dbcontext吗?

    在我的asp net core mvc项目中 我通常会使用这个服务来进行业务操作 services AddDbContextPool
  • 循环 switch 语句

    我是 C 新手 我在控制台应用程序中有一个 菜单 现在 当我完成从菜单中选择一个项目并执行该菜单项所需的操作时 我想循环并再次显示菜单 以便用户可以选择不同的菜单项 我的菜单上有一个退出选项 我只想用它来退出 我尝试过 while 循环 但
  • Netbeans插件解析api

    如何安装netbeans插件解析API 以下是我尝试在 Netbeans 中安装 按需扫描 插件时出现的错误 Some plugins require plugin Parsing API to be installed The plugi
  • bash 包装器将 stderr 设为红色

    Bash 支持颜色 即 033 31m切换到红色并且 033 0m切换回无色 我想制作一个小型的 bash 包装器 它可以可靠地将 stderr 输出为红色 即它应该将 033 31m之前和 033 0m在来自 stderr 的所有内容之后
  • 带有子解析器和可选位置参数的 Python argparse

    我想要一个带有子解析器的程序 它可以处理特定的参数 同时还为之前的解析器保留一些位置和可选参数 事实上 我真正想要的只是一个选项 我的意思是 一个有效的子解析器或一个有效的本地参数 我希望拥有的东西的例子 Program sectionNa