我编写了一些命令行工具,其中某些选项既有单破折号一个字母缩写(短选项),也有更详细命名的双破折号选项(长选项) - 正如我所期望的我们很多人都这样做。 (如果对我编写的工具感到好奇,请检查 jrowellfx 的 github 存储库。)
为了可读性,我(大部分)喜欢使用“驼峰式大小写”作为我的长选项。
虽然关注短选项的情况完全有意义,例如 -f 和 -F 可能被视为不同的选项,但我很想忽略长选项的情况。这意味着如果有人输入了我的一个更详细命名的长选项之一,但将其全部写成小写(而不是驼峰式),我不希望 argparse 抛出错误,而是将其视为使用正确的输入驼色箱。
我不知道该怎么做。我搜索过是否有其他人问过这个问题,但一无所获。我很容易错过其他地方的讨论。但这似乎确实是 argparse 的一个非常好的功能。
我只想为 argparse 指定驼峰式大小写选项,并且我希望帮助和错误消息尊重驼峰式大小写名称。所以我只想让用户在输入更详细的命名选项时更加草率。
argparse 中似乎有一个非常好的功能,不是吗?
有人知道如何深入了解“parse_args()”的内部来实现这种行为吗?
你可以重载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
,这被认为是不好的做法。