将带有参数的字典传递给 argparse
passing a dict with arguments to argparse
我正在使用一个代码库,它期望使用 argparse 库通过命令行提供大量参数,我需要在循环中调用该代码并通过字典而不是通过命令行注入参数而不更改该代码库,我调用代码如下:
parser = argparse.ArgumentParser('Training', parents=[get_args_parser()])
args = parser.parse_args()
main(args)
其中 get_args_parser() 是一长串参数和默认值,例如:
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)
...
如果我需要传递字典作为参数,例如:
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)
使用修改后的参数。
我正在使用一个代码库,它期望使用 argparse 库通过命令行提供大量参数,我需要在循环中调用该代码并通过字典而不是通过命令行注入参数而不更改该代码库,我调用代码如下:
parser = argparse.ArgumentParser('Training', parents=[get_args_parser()])
args = parser.parse_args()
main(args)
其中 get_args_parser() 是一长串参数和默认值,例如:
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)
...
如果我需要传递字典作为参数,例如:
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)
使用修改后的参数。