如何解决使用多个文件管理 argparse
我在 mainParser.py 中有一个解析器
这个解析器非常基础,只有 -h 和 -v 选项。
不过,它也有subparsers
。
每个子解析器位于不同的文件 sub_1.py,sub_2.py
etc` 中。
所有(子)解析器函数都在 parserFunctions.py
这是层次结构:
Parsers /
ParserPackage /
- __init__.py
- mainParser.py
- sub_1.py
- sub_2.py
- parserFunctions.py
mainParser.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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。