从文件读取参数
先读取文件参数,然后读取命令行参数的实现方法如下:
此时args.txt文件里的内容如下:
—seed=2
—format=txt
同时,在调用时,传递命令行参数为:—c=csv —file=args.txt
import argparseclass LoadFromFile(argparse.Action):def __call__(self, parser, namespace, values, option_string=None):with values as f:# parse arguments in the file and store them in the target namespaceparser.parse_args(f.read().split(), namespace)argparser = argparse.ArgumentParser()argparser.add_argument('--seed', type=int, default=1)argparser.add_argument('--c', type=str, default='json')argparser.add_argument('--format', type=str, default='json')argparser.add_argument('--file', type=open, action=LoadFromFile, default=argparse.SUPPRESS)args = argparser.parse_args()print(args)-- outputNamespace(c='csv', format='json', seed=1)
当然,也可以进行更复杂的操作,例如只更新某些参数,或者从json文件等读,本质上,就是给一个回调函数,然后更新namespace即可:
def __call__ (self, parser, namespace, values, option_string=None):with values as f:contents = f.read()# parse arguments in the file and store them in a blank namespacedata = parser.parse_args(contents.split(), namespace=None)for k, v in vars(data).items():# set arguments in the target namespace if they haven’t been set yetif getattr(namespace, k, None) is not None:setattr(namespace, k, v)
