コード例 #1
0
def load_config():
    parser = argparse.ArgumentParser()
    parser.add_argument('-c',
                        '--config',
                        help='config file name',
                        default='config.json')
    parser.add_argument('-e', '--env', help='environment', default='dev')
    # args = parser.parse_args()
    args, unknown = parser.parse_known_args()
    env_name = args.env or 'dev'
    global_profile = profiles.get(env_name, 'dev')
    logger = Log()
    logger.init(global_profile)

    config_name = args.config or 'config.json'
    logger.info('使用配置文件 "{}".'.format(config_name))

    config_file = Path(__file__).parent.joinpath('./', config_name)

    if not config_file.exists():
        config_name = 'config.default.json'
        logger.warning('配置文件不存在, 使用默认配置文件 "{}".'.format(config_name))
        config_file = config_file.parent.joinpath(config_name)

    try:
        # 略坑, Path.resolve() 在 3.5 和 3.6 上表现不一致... 若文件不存在 3.5 直接抛异常, 而 3.6
        # 只有 Path.resolve(strict=True) 才抛, 但 strict 默认为 False.
        # 感觉 3.6 的更合理些...
        config_file = config_file.resolve()
        config_dict = json.loads(config_file.read_text(encoding='utf-8'))
    except Exception as e:
        sys.exit('# 错误: 配置文件载入失败: {}'.format(e))

    global_config = Account.load(config_dict)

    return global_profile, global_config, logger