首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用嵌套子解析器时,Python argparse会创建不正确的用法字符串

在使用嵌套子解析器时,Python argparse可能会创建不正确的用法字符串。这是因为argparse在处理嵌套子解析器时存在一些限制和问题。

首先,让我们了解一下argparse。argparse是Python标准库中的一个模块,用于解析命令行参数和生成帮助文档。它提供了一种简单而灵活的方式来定义命令行接口,并自动生成用法字符串和帮助信息。

在argparse中,嵌套子解析器是指在一个解析器中定义另一个解析器。这种嵌套结构可以用于处理复杂的命令行接口,其中有多个子命令和参数。

然而,当使用嵌套子解析器时,argparse可能会创建不正确的用法字符串。这是因为argparse在生成用法字符串时,只会考虑到最外层的解析器,而忽略了嵌套的子解析器。

为了解决这个问题,我们可以手动创建用法字符串,而不依赖于argparse自动生成的用法字符串。我们可以使用argparse的add_subparsers()方法来创建子解析器,并为每个子解析器定义自己的参数和用法。

下面是一个示例代码,演示了如何使用嵌套子解析器,并手动创建正确的用法字符串:

代码语言:txt
复制
import argparse

# 创建主解析器
parser = argparse.ArgumentParser(prog='myprogram')
subparsers = parser.add_subparsers(dest='command')

# 创建子解析器1
parser_command1 = subparsers.add_parser('command1')
parser_command1.add_argument('--arg1', help='Argument 1 for command 1')

# 创建子解析器2
parser_command2 = subparsers.add_parser('command2')
parser_command2.add_argument('--arg2', help='Argument 2 for command 2')

# 手动创建用法字符串
usage = '''
    myprogram command1 [--arg1 ARG1]
    myprogram command2 [--arg2 ARG2]
'''

# 解析命令行参数
args = parser.parse_args()

# 根据解析结果执行相应的逻辑
if args.command == 'command1':
    print('Running command 1 with arg1:', args.arg1)
elif args.command == 'command2':
    print('Running command 2 with arg2:', args.arg2)

在上面的示例中,我们创建了一个主解析器parser,并使用add_subparsers()方法创建了两个子解析器parser_command1parser_command2。然后,我们手动创建了正确的用法字符串,并在解析命令行参数后根据解析结果执行相应的逻辑。

需要注意的是,这只是一种解决方案,可以避免argparse创建不正确的用法字符串。但是,对于复杂的命令行接口,仍然需要仔细设计和定义解析器,以确保正确解析和处理命令行参数。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云计算产品:https://cloud.tencent.com/product
  • 人工智能产品:https://cloud.tencent.com/product/ai
  • 物联网产品:https://cloud.tencent.com/product/iotexplorer
  • 移动开发产品:https://cloud.tencent.com/product/mobdev
  • 存储产品:https://cloud.tencent.com/product/cos
  • 区块链产品:https://cloud.tencent.com/product/baas
  • 元宇宙产品:https://cloud.tencent.com/product/metaspace
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python argparse 模块作用,以及分享一个通用代码模板

argparse 模块还会自动生成帮助和使用信息。如果用户传入无效参数,argparse 显示错误消息,帮助用户正确使用程序。...如果不指定 type,默认是字符串类型。 help:参数帮助信息。当用户请求帮助,这个描述显示在命令行用法字符串和各种参数帮助消息之间。编写清晰、简洁帮助信息对用户非常重要。...总的来说,这段代码使用 argparse 设置了一个参数解析器,定义了多个命令行参数及其类型、默认值和帮助信息,解析了所提供参数,最终以字典形式返回。.../logs/ 对于 argparse 模块,总结一下: 易于使用argparsePython 中一个非常实用模块,用于解析命令行参数。...您可以创建用户友好命令行接口,使我们 Python 脚本更易于使用和管理。 灵活性:通过使用 argparse,我们可以轻松地解析命令行参数。

19000

parser.add_argument()用法——命令行选项、参数和子命令解析器

argparse是一个Python模块:命令行选项、参数和子命令解析器。...通过使用这种方法,可以在使用 1、argparse简介: argparse 模块是 Python 内置一个用于命令项选项与参数解析模块,argparse 模块可以让人轻松编写用户友好命令行接口。...ArgumentParser() 对象 2、添加参数——调用 add_argument() 方法添加参数 3、解析参数——使用 parse_args() 解析添加参数 2.1 创建一个解析器——创建...ArgumentParser() 对象 使用 argparse 第一步是创建一个 ArgumentParser 对象: parser = argparse.ArgumentParser(description...在帮助消息中,这个描述显示在命令行用法字符串和各种参数帮助消息之间。

2.1K20
  • argparse------用于命令行选项、参数和子命令解析器

    创建一个解析器使用argparse第一步是创建一个ArgumentParser对象:>>> parser = argparse.ArgumentParser(description='Process...默认情况下,如果使用已经使用选项字符串创建参数,ArgumentParser对象引发异常:>>> parser = argparse.ArgumentParser(prog='PROG')>>> parser.add_argument...默认情况下,帮助操作自动添加到解析器中。有关如何创建输出详细信息,请参见ArgumentParser。...parser_class - 用于创建解析器实例类,默认情况下是当前解析器类(例如ArgumentParser)。 action - 当在命令行中遇到这个参数要采取基本操作类型。...当参数概念分组比默认更好,可以使用add_argument_group()方法创建适当组:>>> parser = argparse.ArgumentParser(prog='PROG', add_help

    7K20

    Python3 命令行参数解析

    Contents 1 sys.argv用法 2 argparse 模块用法 2.1 理解 add_argument() 方法 2.2 argparse示例 3 参考资料 sys.argv,这种方法比较古老...,这里可用到 argparse 模块,它是 Python 内置一个用于命令选项与参数解析模块,通过在程序中定义好我们需要参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息...使用 argparse 模块解析命令行参数,主要分三个步骤:创建解析器、添加参数、解析参数,步骤如下: 创建 ArgumentParser() 对象 调用 add_argument() 方法添加参数:...号,当不指定值对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示...help – 参数帮助信息,当指定为 argparse.SUPPRESS 表示不显示该参数帮助信息. metavar – 在 usage 说明中参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写参数名称

    1.3K11

    Python argparse标准库快速入门

    Python是一门非常好用脚本语言,自然使用它来开发命令行程序也比较方便。而且Python标准库中有一个名为argparse库,可以非常方便让我们把命令行参数转换成所需数据格式。...初见argparse 首先来看看argparse基本用法,下面是最简单一个例子。...,我们要使用argparse标准库就必然需要创建这个类实例。...prog - 程序名称(默认:sys.argv[0]),默认是Python程序文件名 usage - 描述程序用途字符串(默认值:从添加到解析器参数生成) description - 在参数帮助文档之前显示文本...count会存储参数出现次数。常见用法是指定日志输出级别,例如有的程序-v显示简单输出,-vv显示复杂输出。

    88910

    Python-argparse模块

    最近在GitHub上欣赏别人写代码,发现一个常用模块–argparse,居然我到现在才知道,简直是罪过,于是马上开始了这个模块用法学习,这样后面我在写时候就可以摈弃input()函数来交互了。...这个模块是python内置所有是不需要安装,我们直接import即可。...argparse模块功能 该模块可以在命令模式下完成使用者与程序之间参数交互,并且这个模块自动生成help菜单,让使用者可以通过 -h|–help查看程序使用方法等。...使用方法 这里主要分四步: import导入该模块:import argparse 创建解析器对象:parse = argparse.ArgumenParser() 添加需要命令行参数与选项:parse.add_argument...| 实列 这里贴出我写简单列子来辅助说明该模块使用方法 # author:Tommonkey # date:2022/5/4 import sys import argparse

    47620

    【测试开发】python系列教程:argparse 模块

    为了简化参数解析,我们可以使用内置argparse库,定义好各个参数类型后,它能直接返回有效参数。...argparse定义四个步骤 导入argparse包 ——import argparse 创建一个命令行解析器对象 ——创建 ArgumentParser() 对象 给解析器添加命令行参数 ——调用add_argument...定义命令行解析器对象 parser = argparse.ArgumentParser(description='Demo of argparse') # 2....通常,这些调用指定 ArgumentParser 如何获取命令行字符串并将其转换为对象。这些信息在 parse_args() 调用时被存储在ArgumentParser实例化对象中,以供后续使用。...以上就是这个库介绍,我们在实际中,也遇到这个问题,在实际交付脚本中,大家不知道怎么使用,在交付时候,就可以用这个,去出一个教程,大家运行时候,就知道,这个脚本需要传递参数类型,内容了,方便大家执行脚本时候

    17910

    Python 基础(二十一):argparse 模块

    简介 argparse 模块主要用于处理 Python 命令行参数和选项,程序定义好所需参数后,该模块会通过 sys.argv 解析出那些参数;除此之外,argparse 模块还会自动生成帮助和使用手册...使用 argparse 模块,我们可以轻松编写出用户友好命令行接口。 2....使用 我们先来看一个简单示例: import argparse # 创建解析对象 parser = argparse.ArgumentParser() # 解析 parser.parse_args()...fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True) 这个方法是用来创建解析器对象...,看一下方法中每一个参数含义: prog:程序名称(默认:sys.argv[0]) usage:描述程序用途字符串(默认值:从添加到解析器参数生成) description:在参数帮助文档之前显示文本

    60120

    使用命令行界面运行Python脚本

    标签:Python,argparse 本文将讲解如何使用带有argparse命令行界面运行Python脚本。...我们可以在命令行上键入不同参数并将这些参数传递到脚本中,而不是每次运行脚本都更改.py文件中代码。因此,使用CLI是非常灵活和方便,而且,从黑屏启动程序让你更酷,更像一个真正程序员。...注意,在CLI中只使用sys.argv是完全可以。 步骤5:介绍argparseargparse是一个标准Python库,因此不需要专门安装它。...我们可以定义程序需要参数,argparse将找出如何从sys.argv解析这些参数。该库还自动生成帮助和用法消息。 首先,我们实例化ArgumentParser()对象。...注意,原始解析参数将始终是string(字符串)。 help是对参数作用简短描述。 记住,split_merge_pdf()函数有三个参数,可以将它们全部添加到解析器对象中。

    2.8K30

    123-R茶话20-整理你环境里参数变量及给R脚本进行参数配置

    我平时在使用Rstudio ,常常会因为环境中变量太多,而目不暇接: 要是能把它们折叠起来就好了。 列表搞定 也就是列表事情。...argparse进行参数配置 参见:R命令行参数解析 - 知乎 (zhihu.com)[2]作者:史冬波 这个包其实蛮有意思: ★为了能够使用Make来构建完整数据自动分析流程,我们就需要R代码能够从命令行解析参数并在...argparse包是受到Python中同名包启发开发,其用法Python中接近,可以让我们在跨语言编程时候更加轻松。...” 也就是说,源代码中,作者真实目的,其实并不是整理环境中变量,而是为了方便调用Rscript,这个之前我们也简单介绍过:[[98-R茶话17-在后台执行R命令]] 回顾一下之前Rscript...包主要有三个步骤: 使用ArgumentParser()创建参数解析对象; 通过add_argument 添加参数到之前对象; parser$parse_args() 调用解析器,获得参数与参数对应

    61420

    Python 命令行之旅:初探 argparse

    不过,公众号更新是不会停。今天,继续分享一个优质系列文章:深入使用 argparse。这个系列属于一个更大“讲解开源项目系列”,说实话,这是我一直想要写系列。...别着急,本文作为 Python 命令行之旅第一篇将带你逐步揭开命令行解析面纱,介绍如何使用 Python 内置 argparse 标准库解析命令行,并在后续系列文章中介绍各具特色第三方命令行库...若你仍在使用 Python 2,请注意两者之间语法和库使用差异哦~ ‍介绍 argparse 作为 Python 内置标准库,提供了较为简单方式来编写命令行接口。...快速开始 设置解析器 第一步要做就是设置解析器,后续对命令行解析就依赖于这个解析器,它能够将命令行字符串转换为 Python 对象。...( description='My Cmd Line Program', ) 定义参数 通过 ArgumentParser.add_argument 方法来为解析器设置参数信息,以告诉解析器命令行字符串哪些内容应解析为哪些类型

    68320

    怎样学Python 第二十三课 模块化处理用户输入基础

    这篇文章将会一步一步地讲如何使用argparse,所以,让我们开始吧! 第1步:导入Argparse并设置解析器 为了解决问题,我们需要像其他任何模块一样导入argparse: #!.../usr/bin/env python import argparse 请注意,我们同样Python解释器路径设置在了顶部。...现在我们已经完成了这个工作,我们需要制作parser,这将用于处理我们参数,我们可以通过调用argparseArgumentParser()方法并将其存储在变量中来创建parser对象,现在让我们创建我们解析器...我们将在parser中添加3个参数,然后我们将对它们进行一些处理,当我们添加参数,我们有多个选项,我们将使用其中三个。...在我们给flag之后,我们为flag指定帮助,该字符串将在帮助页面生成作为帮助打印,在帮助字符串之后,我们设置了操作。

    704100

    Python 命令行之旅:初探 argparse

    别着急,本文作为 Python 命令行之旅第一篇将带你逐步揭开命令行解析面纱,介绍如何使用 Python 内置 argparse 标准库解析命令行,并在后续系列文章中介绍各具特色第三方命令行库...本系列文章默认使用 Python 3 作为解释器进行讲解。...若你仍在使用 Python 2,请注意两者之间语法和库使用差异哦~ ‍介绍 argparse 作为 Python 内置标准库,提供了较为简单方式来编写命令行接口。...快速开始 设置解析器 第一步要做就是设置解析器,后续对命令行解析就依赖于这个解析器,它能够将命令行字符串转换为 Python 对象。...( description='My Cmd Line Program', ) 定义参数 通过 ArgumentParser.add_argument 方法来为解析器设置参数信息,以告诉解析器命令行字符串哪些内容应解析为哪些类型

    47510

    Python | 使用argparse解析命令行参数

    今天是Python专题第27篇文章,我们来聊聊Python当中命令行参数工具argparse。...基本用法 argparsePython当中一个库,我们需要先import一下,这个库我没记错应该是Python自带,也不需要安装,我们直接就可以使用。...# 这里ArgumentParser可以传入一个字符串,表示用途 parser = argparse.ArgumentParser() parser.parse_args() 这个时候其实就已经有了一个解析器了...因为命令行传入参数默认都是字符串,如果我们要进行数学上计算,使用str还需要自己转换,这就很不方便。...总结 有了parser之后,我们在Python当中处理命令行参数变得非常简单,我们可以做各种各样定制化操作。

    2K10

    Python 命令行之旅:深入 argparse(二)

    本文将继续深入了解 argparse 进阶玩法,一窥探其全貌,助力我们拥有实现复杂命令行程序能力。 本系列文章默认使用 Python 3 作为解释器进行讲解。...若你仍在使用 Python 2,请注意两者之间语法和库使用差异哦~ 帮助 自动生成帮助 当你在命令行程序中指定 -h 或 --help 参数,都会输出帮助信息。...由于后续解析器自动生成帮助信息,这里解析器指定 add_help=False 以不自动生成帮助信息: # bash.py import argparse parser = argparse.ArgumentParser...但还有一种极为常见命令行使用方式是 cli subcmd --a --b xxx。比如当我们要通过 git 推送标签,会用到 git push --tags。...当解析器解析参数,会调用该类 __call__ 方法,该方法签名为 __call__(self, parser, namespace, values, option_string=None),其中

    1.4K20

    argparse 高级用法

    Python argparse 大家都不陌生,是用来解析命令行参数标准库,它用法大致是这样: import argparse parser = argparse.ArgumentParser...然而当我更深入地写下去,试图加一些更复杂功能,我发现了 click 不足之处,并促使我最终选择了 argparse,到目前看来 argparse 提供能力能很好地胜任工作。...argparse 是拿到 sys.argv 之后按顺序看,如果找到一个参数就把结果中对应这个参数值赋好,如果找到一个子命令名称则取得这个子命令解析器 递归调用这个解析器去解析剩下命令行参数。...比如 python cli.py greet goodbye 匹配到是 greet 命令,而 goodbye 会被当作 greet 参数在 greet 自己解析器中解析。...结语 我们利用了 Python 动态特性,加上合理技巧(IoC)实现了 argparse OOP 化。

    24640

    Python 命令行之旅:使用 argparse 实现 git 命令

    本文将以我们日常工作中最常见 git 命令为例,讲解如何使用 argparse 库来实现一个真正可用命令行程序。 本系列文章默认使用 Python 3 作为解释器进行讲解。...若你仍在使用 Python 2,请注意两者之间语法和库使用差异哦~ git 常用命令 大家不妨回忆一下,平时最常使用 git 子命令都有哪些?...argparse 要实现子命令,那么之前介绍到 嵌套解析器 必不可少 当用户键入子命令,子命令所对应解析器需要作出响应,那么需要用到子解析器 set_defaults 功能 针对 git add...git 和 args 对象,用以处理对应命令 至此,我们就实现了一个简单 git 命令行,使用 python argparse-git.py -h 查看帮助如下: usage: git [-h] command...你是否想过,argparse 四步曲虽然理解简单,但略微麻烦。有没有更简单方式?如果我很熟悉命令行帮助语法,我能不能写个帮助字符串就把所有的命令行元信息给定义出来?

    67820
    领券