如何忽略 argparse 中双破折号选项(长选项)的大小写?

问题描述 投票:0回答:1

我编写了一些命令行工具,其中某些选项既有单破折号一个字母缩写(短选项),也有更详细命名的双破折号选项(长选项) - 正如我所期望的我们很多人都这样做。 (如果对我编写的工具感到好奇,请检查 jrowellfx 的 github 存储库。)

为了可读性,我(大部分)喜欢使用“驼峰式大小写”作为我的长选项。

虽然关注短选项的情况完全有意义,例如 -f 和 -F 可能被视为不同的选项,但我很想忽略长选项的情况。这意味着如果有人输入了我的一个更详细命名的长选项之一,但将其全部写成小写(而不是驼峰式),我不希望 argparse 抛出错误,而是将其视为使用正确的输入驼色箱。

我不知道该怎么做。我搜索过是否有其他人问过这个问题,但一无所获。我很容易错过其他地方的讨论。但这似乎确实是 argparse 的一个非常好的功能。

我只想为 argparse 指定驼峰式大小写选项,并且我希望帮助和错误消息尊重驼峰式大小写名称。所以我只想让用户在输入更详细的命名选项时更加草率。

argparse 中似乎有一个非常好的功能,不是吗?

有人知道如何深入了解“parse_args()”的内部来实现这种行为吗?

python argparse case-insensitive
1个回答
0
投票

你可以重载ArgumentParser

import argparse

class CustomArgsParser(argparse.ArgumentParser):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def add_argument(self, *args, **kwargs):
        args = tuple(arg.lower() for arg in args if arg.startswith('--'))
        return super().add_argument(*args, **kwargs)

    def _get_option_tuples(self, option_string):
        result = super()._get_option_tuples(option_string.lower())
        return result

parser = CustomArgsParser()
parser.add_argument('--test', help='Test argument')

args = parser.parse_args()
print(args.test)

注意,我们正在超载内部

_get_option_tuples
,这被认为是不好的做法。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.