python - 使用其他命名空间/字典更新 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 以便能够更新。
解决方案
在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)
namespace
使用来自 的值复制更新subnamespace
。 argparse
使用泛型setattr
来设置值,最大限度地减少对有效名称的假设。
您也许还可以使用
namespace.__dict__.update(subnamespace.__dict__)
但我没有测试过。
推荐阅读
- authentication - istio 从 ext-auth 中排除服务
- javascript - 如何从两个数组中创建 json 对象
- sql - 时间戳和增加周数
- azure-cosmosdb - 使用 Entity Framework Core 3 在 CosmosDB 中存储具有 JSON 值的属性
- ajax - ASP.NET Core 3.1 Razor Pages Web App:使用 Ajax 调用后,剃刀页面表单数据被擦除的原因是什么?
- akka - 使用 Akka 流进行一对多合并
- perl - 如何从 unix shell 调用带有参数的子例程
- airflow-scheduler - 每周二 00:00:00 运行 Airflow DAG
- javascript - 加载后使用数据表
- reactjs - 功能组件被重新渲染超过应该