Python如何从argparse获取变量的值,而不是变量的名称?

7
如果我使用 args.svc_name,我期望得到与 args.option1 相同的结果,因为 svc_name 的值是 option1。但是我收到了“'Namespace' object has no attribute 'svc_name's'”错误提示。
parser = argparse.ArgumentParser(prog=None,description="test")   
parser.add_argument("--option1", nargs="?",help="option")
args = parser.parse_args()
svc_name = "option1"
print (args.svc_name)

有人可以帮我吗?

1个回答

17
< p > ArgumentParser 类将键作为直接属性暴露,而不是映射,因此要直接获取属性,只需直接访问即可。按照问题中的示例,它只会简单地

print(args.option1)

如果想要让另一个变量(例如来自问题的svc_name)存储属性/标志以从argparser中获取值,则可以将其转换为映射(即dict),使用vars函数,然后调用get方法。

print(vars(args).get(svc_name))

或者,getattr(args, svc_name)


谢谢。只需注意(对于我的情况),--num-max 将转换为 args.num_max(即破折号将转换为下划线)。 - Sridhar Sarnobat
1
@SridharSarnobat 是的,正如文档所述 - “任何内部的-字符都将转换为_字符,以确保字符串是有效的属性名称”;此外,如果提供了dest,那么它将成为相应的属性名称。 - metatoaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接