Python 使用其他命名空间/字典更新argparse命名空间
假设我有两个argparse名称空间Python 使用其他命名空间/字典更新argparse命名空间,python,dictionary,argparse,Python,Dictionary,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(
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()
如何使用args2
更新args1
?我知道更新dicts,即
dict = {'name': 'Pete'}
dict.update(**vars(args2))
我认为这应该是可行的(未经测试),但是您还可以用另一个名称空间更新argparse名称空间吗?我可以将
args2
转换为dict以进行更新。在子parser
操作类中,argparse.py
使用:
subnamespace, arg_strings = parser.parse_known_args(arg_strings, None)
for key, value in vars(subnamespace).items():
setattr(namespace, key, value)
使用子名称空间
中的值复制更新名称空间
argparse
使用通用的setattr
设置值,最大限度地减少对有效名称的假设
您也可以使用
namespace.__dict__.update(subnamespace.__dict__)
但我还没有测试过。这基本上就是我最后做的,谢谢!