首页 > 解决方案 > 使用其他命名空间/字典更新 argparse 命名空间

问题描述

假设我有两个 argparse 命名空间

parser1 = argparse.ArgumentParser()
parser1.add_argument('--name', type=str, required=False, default='John')

args1 = parser1.parse_args()

parser2 = argparse.ArgumentParser(argument_default=argparse.SUPPRESS)
parser2.add_argument('--name', type=str, required=False)

args2 = parser2.parse_args()

args1我该如何更新args2?我知道更新字典,即

dict = {'name': 'Pete'}
dict.update(**vars(args2))

我认为这应该可以工作(未经测试),但你也可以用另一个命名空间更新一个 argparse 命名空间吗?我可以转换args2为 dict 以便能够更新。

标签: pythondictionaryargparse

解决方案


subparserAction 类中,argparse.py使用:

    subnamespace, arg_strings = parser.parse_known_args(arg_strings, None)
    for key, value in vars(subnamespace).items():
        setattr(namespace, key, value)

namespace使用来自 的值复制更新subnamespaceargparse使用泛型setattr来设置值,最大限度地减少对有效名称的假设。

您也许还可以使用

 namespace.__dict__.update(subnamespace.__dict__)

但我没有测试过。


推荐阅读