使用其他命名空间/字典更新 argparse 命名空间
Posted
技术标签:
【中文标题】使用其他命名空间/字典更新 argparse 命名空间【英文标题】:Update argparse namespace with other namespace/dictionary 【发布时间】: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
转换为能够更新的字典。
【问题讨论】:
【参考方案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
的值复制更新namespace
。 argparse
使用通用 setattr
设置值,最大限度地减少对有效名称的假设。
你也可以使用
namespace.__dict__.update(subnamespace.__dict__)
但我没有测试过。
【讨论】:
这基本上就是我最终要做的,谢谢!以上是关于使用其他命名空间/字典更新 argparse 命名空间的主要内容,如果未能解决你的问题,请参考以下文章
Python Argparse:获取用于命名空间变量的命令行参数