ArgumentParser 和 YAML 在Python中的共同使用 / 用 YAML更新Parser
首先初始化ArgumentParser
,然后添加命令行参数
yaml
的解析结果是一个字典,可以用来更新parser
,注意不是parser.parse_args()
的结果
然后最后可以用parser.parse_args(remaining)
,用命令行当中的内容覆盖掉YAML当中的内容
from os import get_inheritable
import yaml
import argparse
default_config_parser = parser = argparse.ArgumentParser(
description='Training Config', add_help=False)
parser.add_argument(
'-c',
'--config_yaml',
default=
'train.yml',
type=str,
metavar='FILE',
help='YAML config file specifying default arguments')
# YAML should override the argparser's content
def _parse_args_and_yaml(given_parser=None):
if given_parser == None:
given_parser = default_config_parser
given_configs, remaining = given_parser.parse_known_args()
if given_configs.config_yaml:
with open(given_configs.config_yaml, 'r', encoding='utf-8') as f:
cfg = yaml.safe_load(f)
given_parser.set_defaults(**cfg)
# The main arg parser parses the rest of the args, the usual
# defaults will have been overridden if config file specified.
args = given_parser.parse_args(remaining)
# Cache the args as a text string to save them in the output dir later
args_text = yaml.safe_dump(args.__dict__, default_flow_style=False)
return args, args_text
def parse_args_and_yaml(arg_parser=None):
return _parse_args_and_yaml(arg_parser)[0]
if __name__ == "__main__":
args, args_text = _parse_args_and_yaml()
本博文本意在于记录个人的思考与经验,部分博文采用英语写作,可能影响可读性,请见谅
本文来自博客园,作者:ZXYFrank,转载请注明原文链接:https://www.cnblogs.com/zxyfrank/p/15414605.html