123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- from argparse import ArgumentParser, RawDescriptionHelpFormatter
- import yaml
- class ArgsParser(ArgumentParser):
- def __init__(self):
- super(ArgsParser,
- self).__init__(formatter_class=RawDescriptionHelpFormatter)
- self.add_argument('-c', '--config', help='configuration file to use')
- self.add_argument('-o',
- '--opt',
- nargs='*',
- help='set configuration options')
- self.add_argument('--local_rank')
- self.add_argument('--local-rank')
- def parse_args(self, argv=None):
- args = super(ArgsParser, self).parse_args(argv)
- assert args.config is not None, 'Please specify --config=configure_file_path.'
- args.opt = self._parse_opt(args.opt)
- return args
- def _parse_opt(self, opts):
- config = {}
- if not opts:
- return config
- for s in opts:
- s = s.strip()
- k, v = s.split('=', 1)
- if '.' not in k:
- config[k] = yaml.load(v, Loader=yaml.Loader)
- else:
- keys = k.split('.')
- if keys[0] not in config:
- config[keys[0]] = {}
- cur = config[keys[0]]
- for idx, key in enumerate(keys[1:]):
- if idx == len(keys) - 2:
- cur[key] = yaml.load(v, Loader=yaml.Loader)
- else:
- cur[key] = {}
- cur = cur[key]
- return config
|