【问题标题】:Update argparse namespace with other namespace/dictionary使用其他命名空间/字典更新 argparse 命名空间
【发布时间】:2021-06-24 03:58:48
【问题描述】:

假设我有两个 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 转换为能够更新的字典。

【问题讨论】:

    标签: python dictionary argparse


    【解决方案1】:

    subparser Action 类中,argparse.py 使用:

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

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

    你也可以使用

     namespace.__dict__.update(subnamespace.__dict__)
    

    但我没有测试过。

    【讨论】:

    • 这基本上就是我最终要做的,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    相关资源
    最近更新 更多