python - 使用多个文件管理 argparse
问题描述
我在 mainParser.py 中有一个解析器
这个解析器非常基础,只有 -h 和 -v 选项。
但是,它也有subparsers
.
每个子解析器都在不同的文件sub_1.py, sub_2.py
等中。
所有(子)解析器函数都在parserFunctions.py
这是层次结构:
Parsers /
ParserPackage /
- __init__.py
- mainParser.py
- sub_1.py
- sub_2.py
- parserFunctions.py
主解析器.py:
import argparse
from Parsers.ParserPackage.parserFunctions import mainParserFunc
mainParser = argparse.ArgumentParser(
prog="XXX",
description="YYY",
add_help=False
)
SUBPARSER = mainParser.add_subparsers(title="ZZZ")
mainParser.add_argument(...)
.
.
.
mainParser.set_defaults(func=mainParserFunc)
sub_1.py
from Parsers.ParserPackage.parserFunctions import sub_1_parserFunc
from Parsers.ParserPackage.mainParser import SUBPARSER
sub_1_parser = SUBPARSER.add_parser(name="AAA")
sub_1_parser.add_argument(...)
.
.
.
sub_1_parser.set_defaults(func=sub_1_parser_parserFunc)
sub_2.py
from Parsers.ParserPackage.parserFunctions import sub_2_parserFunc
from Parsers.ParserPackage.mainParser import SUBPARSER
sub_2_parser = SUBPARSER.add_parser(name="BBB")
sub_2_parser.add_argument(...)
.
.
.
sub_2_parser.set_defaults(func=sub_2_parser_parserFunc)
问题:
当我打电话时mainParser.parse_args(myArgs.split())
:它说'无效选择'AAA'/'BBB'(从 中选择)。
为什么?
解决方案
经过多次尝试,我找到了解决方案。
由于 mainParser 没有导入子解析器(显然),它不知道它们的存在。
正确的解决方案是创建一个新文件,该文件将导入 mainParser 以及所有子解析器。导入发生时 - 它加载代码,然后正确定义 mainParser
推荐阅读
- kotlin - IntelliJ (Kotlin) Visual Unresolved Reference Bug
- flutter - 尝试添加图标时出现此错误:类型“String”不是“函数结果”的“IconData”类型的子类型
- react-navigation - 顶级堆栈导航器看不到孙堆栈导航器的屏幕选项(react-navigation 5)
- xampp - Magento 重定向到 xampp 仪表板
- node.js - 评估函数后等待请求
- mlt - MLT 配置文件和 MLT 预设有什么区别?
- c# - c#:如何解析和验证具有自动生成格式的日期时间字符串
- azure-data-factory - 如何在大型 Azure 数据架构(多个 ADF、数据湖、Spark/Hadoop 集群)中管理架构元数据?
- reactjs - 单元测试失败无法找到元素
- css - 使用悬停 CSS 的按钮在按下按钮后截断文本