如何为Python argparse正确添加command1 google子命令?
问题解答
你的代码parser2 = google_cmd.add_parsers(parser)是错误的,核心问题是搞反了argparse子命令的创建逻辑:add_parsers()是主解析器的方法,用来生成子命令的容器,而非子命令解析器的调用方法。
正确实现步骤
假设你现有代码的基础结构如下(对应已有的command1主命令和plugins子命令):
import argparse # 1. 创建主解析器 parser = argparse.ArgumentParser(prog="command1") parser.add_argument("--version", action="version", version="%(prog)s 1.0") # 2. 创建子命令容器(这一步是生成所有子命令的基础) subparsers = parser.add_subparsers(dest="subcommand", required=True) # 3. 已实现的plugins子命令 plugins_cmd = subparsers.add_parser("plugins", help="管理插件") plugins_cmd.add_argument("--update", action="store_true", help="更新所有插件") plugins_cmd.add_argument("--upgrade", action="store_true", help="将插件升级到最新版本")
要新增google子命令,只需在上述代码后添加以下内容:
# 4. 新增google子命令 google_cmd = subparsers.add_parser("google", help="与Google服务交互") # 给google子命令添加参数 google_cmd.add_argument("--auth", action="store_true", help="完成Google身份验证") google_cmd.add_argument("--refresh", action="store_true", help="刷新Google身份验证令牌")
关键逻辑说明
- 必须先通过主解析器的
add_parsers()方法创建子命令容器subparsers,所有子命令都要基于这个容器来创建 - 每个子命令(
plugins、google)都是通过subparsers.add_parser()生成独立的解析器,再给这个解析器添加专属参数 - 你之前的错误在于试图让子命令解析器去调用
add_parsers(),这不符合argparse的设计逻辑
内容的提问来源于stack exchange,提问作者Jeroen Oudshoorn
相关产品推荐
相关产品推荐

