繁体   English   中英

将带有 arguments 的 dict 传递给 argparse

[英]passing a dict with arguments to argparse

我正在使用一个代码库,该代码库期望通过命令行使用 argparse 库提供大量参数,并且我需要在循环中调用该代码并通过字典而不是通过命令行注入 arguments 而不更改该代码库,我调用代码如下:

parser = argparse.ArgumentParser('Training', parents=[get_args_parser()])
args = parser.parse_args()
main(args)

其中 get_args_parser() 是 arguments 和默认值的大型列表,例如:

def get_args_parser():
    parser = argparse.ArgumentParser('Set transformer detector', add_help=False)
    parser.add_argument('--lr', default=1e-4, type=float)
    parser.add_argument('--lr_backbone', default=1e-5, type=float)
    parser.add_argument('--batch_size', default=2, type=int)
    parser.add_argument('--weight_decay', default=1e-4, type=float)
    parser.add_argument('--epochs', default=300, type=int)
    parser.add_argument('--lr_drop', default=200, type=int)

...

如果我需要传递字典,例如 arguments,例如:

argdict = {'lr_drop':20,'batch_size':5} 

我该怎么做?

你应该这样使用:

import argparse
ap = argparse.ArgumentParser()
ap.add_argument("-d", "--dict", required=True, help="Your dict as string", default="{}")
args = vars(ap.parse_args())
argdict = eval(args["dict"])
print(argdict)
# or you cam print some dict specific var
print(argdict["name"]) #Jasar

你可以这样调用你的文件:

python3 file.py -d '{"name":"Jasar"}'

使用@Jaser 和@chepner 的一些线索,我所做的如下:

args_to_argdict = {'a':1 , 'b':49 ,'c': 'text' }



    parser = argparse.ArgumentParser(parents=[get_args_parser()])
    args = parser.parse_args()
    arg_dict = vars(args)

    for key,value in args_to_argdict.items():
        arg_dict[key]= value

以便 args 值发生变化,然后我运行主程序:

main(args)

使用修改后的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM