argparse - 禁用相同参数的出现

2024-06-08

我正在尝试使用 argparse 禁用一个命令行中出现相同的参数

./python3 --argument1=something --argument2 --argument1=something_else

这意味着这应该会引发错误,因为 argument1 的值被覆盖,默认情况下,argparse 只是覆盖该值并像什么都没发生一样继续...有什么聪明的方法可以禁用此行为吗?


我不认为有一种本地方法可以使用argparse,但幸运的是,argparse提供报告自定义错误的方法。最优雅的方法可能是定义一个自定义操作来检查重复项(如果有则退出)。

class UniqueStore(argparse.Action):
    def __call__(self, parser, namespace, values, option_string):
        if getattr(namespace, self.dest, self.default) is not self.default:
            parser.error(option_string + " appears several times.")
        setattr(namespace, self.dest, values)

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--foo', action=UniqueStore)

args = parser.parse_args()

(阅读docs https://docs.python.org/dev/library/argparse.html#action关于自定义操作)

另一种方法是使用追加操作并计算列表的长度。

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--foo', action='append')
args = parser.parse_args()

if len(args.foo) > 1:
    parser.error("--foo appears several times.")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

argparse - 禁用相同参数的出现 的相关文章

随机推荐