【发布时间】:2021-12-25 16:18:01
【问题描述】:
我有一个代码需要根据配置文件动态构建其命令行参数。从示意图上看,我最终要做的是
parser = argparse.ArgumentParser()
parser.add_argument("-c", "--config", type=str, default="",
help="Path to config file.")
args, unknown = parser.parse_known_args()
#here do stuff with args.config to extend parser list of arguments, and then:
parser.parse_args()
参数管理似乎工作得很好,但我遇到的问题是--help 将在第一次调用parse_known_args 时退出,而不是第二次调用parser.parse_args(),它会显示所有动态添加的参数... . 有没有办法解决这个问题?
【问题讨论】:
-
使用默认的
add_help=True,会创建一个help参数,并将始终起作用,包括parse_known_args。parse_args只是parse_known_args,处理unknown的方式不同。您可以在没有add_help的情况下创建解析器。但是你不会得到任何帮助 - 除非你稍后添加自己的help参数。可能你应该制作两个解析器,一个没有读取配置的帮助,另一个有常规帮助。 -
是的,这似乎是一种出路,首先创建两个解析器,即
parser = argparse.ArgumentParser(add_help=False),然后动态添加参数parser2 = argparse.ArgumentParser(parser, add_help=True)。谢谢@hpaulj