gpt4 book ai didi

python - 从 ArgumentParser 获取允许参数的正确方法

转载 作者:太空狗 更新时间:2023-10-29 21:52:10 25 4
gpt4 key购买 nike

问题:从现有 argparse.ArgumentParser 对象访问可能参数的预期/官方方式是什么?

示例:让我们假设以下上下文:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', '-f', type=str)

在这里,我想获得以下允许参数列表:

['-h', '--foo', '--help', '-f']

我发现以下解决方法对我有用

parser._option_string_actions.keys()

但我对此并不满意,因为它涉及访问未正式记录的 _ 成员。此任务的正确替代方案是什么?

最佳答案

我认为没有“更好”的方法来实现您想要的。


如果你真的不想使用 _option_string_actions 属性,你可以处理 parser.format_usage() 来检索选项,但是这样做,你会仅获取简短的选项名称。

如果您需要短选项名称和长选项名称,您可以改为处理 parser.format_help()

这个过程可以用一个非常简单的正则表达式来完成:-+\w+

import re

OPTION_RE = re.compile(r"-+\w+")
PARSER_HELP = """usage: test_args_2.py [-h] [--foo FOO] [--bar BAR]

optional arguments:
-h, --help show this help message and exit
--foo FOO, -f FOO a random options
--bar BAR, -b BAR a more random option
"""

options = set(OPTION_RE.findall(PARSER_HELP))

print(options)
# set(['-f', '-b', '--bar', '-h', '--help', '--foo'])

或者您可以先创建一个包含参数解析器配置的字典,然后从中构建参数解析器。这样的字典可以将选项名称作为键,将选项配置作为值。这样做,您可以通过用 itertools.chain 扁平化的字典键访问选项列表。 :

import argparse
import itertools

parser_config = {
('--foo', '-f'): {"help": "a random options", "type": str},
('--bar', '-b'): {"help": "a more random option", "type": int, "default": 0}
}

parser = argparse.ArgumentParser()
for option, config in parser_config.items():
parser.add_argument(*option, **config)

print(parser.format_help())
# usage: test_args_2.py [-h] [--foo FOO] [--bar BAR]
#
# optional arguments:
# -h, --help show this help message and exit
# --foo FOO, -f FOO a random options
# --bar BAR, -b BAR a more random option

print(list(itertools.chain(*parser_config.keys())))
# ['--foo', '-f', '--bar', '-b']

如果我不愿意使用 _option_string_actions,我会采用最后一种方式。

关于python - 从 ArgumentParser 获取允许参数的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39996295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com