【问题标题】:deferring exiting on --help when using parse_known_args()使用 parse_known_args() 时推迟退出 --help
【发布时间】: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_argsparse_args 只是 parse_known_args,处理 unknown 的方式不同。您可以在没有 add_help 的情况下创建解析器。但是你不会得到任何帮助 - 除非你稍后添加自己的 help 参数。可能你应该制作两个解析器,一个没有读取配置的帮助,另一个有常规帮助。
  • 是的,这似乎是一种出路,首先创建两个解析器,即parser = argparse.ArgumentParser(add_help=False),然后动态添加参数parser2 = argparse.ArgumentParser(parser, add_help=True)。谢谢@hpaulj

标签: python argparse


【解决方案1】:

前段时间我也遇到过同样的问题。可以使用两个解析器来解决。

  • 第一个预解析器,用add_help=False判断配置文件;
  • 第二个有帮助的完整解析器。
# test.py
import argparse

# First pre-parser to determine the configuration file
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument("-c", "--config", default="", help="Path to config file.")
args = parser.parse_known_args()

# Do something with args.config

# Full and real parser
parser = argparse.ArgumentParser()
parser.add_argument("-c", "--config", default="", help="Path to config file.")
parser.add_argument("-o", "--option", help="Option with default value from config file")

parser.parse_args()

这导致:

$ python3 test.py --help
usage: test.py [-h] [-c CONFIG] [-o OPTION]

optional arguments:
  -h, --help            show this help message and exit
  -c CONFIG, --config CONFIG
                        Path to config file.
  -o OPTION, --option OPTION
                        Option with default value from config file

【讨论】:

  • 谢谢。是的,这正是我想出的。
猜你喜欢
  • 1970-01-01
  • 2021-07-18
  • 2012-01-02
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多