【发布时间】:2021-09-24 16:06:08
【问题描述】:
现在,我有一个可以使用 argparse 接受命令行参数的脚本。例如,像这样:
#foo.py
def function_with_args(optional_args=None):
parser = argparse.ArgumentParser()
# add some arguments
args = parser.parse_args(optional_args)
# do something with args
但是,我希望能够将此函数与字典一起使用,例如:
def function_using_dict(**kwargs):
# define parser and add some arguments
args = parser.parse_dict_args(kwargs)
# everything else is the same
请注意,我想使用 argparse 中有很多带有默认值的参数,因此以下方法不起作用:
def function_no_default_args(**kwargs):
args = kwargs # not using default values that we add to the parser!
【问题讨论】:
-
您是否只想将一组值注入
Namespace对象?您可以直接这样做:args = argparse.Namespace(**kwargs)。parse_args的重点是将字符串列表转换为Namespace对象;目前尚不清楚您的dict中有什么,或者您希望argparse以其他方式处理它。 -
那是个好主意。有没有办法使用解析器获取默认值,比如
ns = parser.parse_args([]); ns.update(kwargs)? (但问题是命名空间似乎没有“更新”功能) -
您可以使用
parser.parse_args([], ns),尽管parse_args不会考虑ns中已有的值。如果您希望您的kwargs优先于parse_args,您可以执行n = Namespace(**{ **vars(p.parse_args([])), **kwargs})之类的操作。
标签: python dictionary argparse