[英]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.