Einfache Konfigurationsdatei für allgemeine Python-Einstellungen

Einfache Konfigurationsdatei für allgemeine Python-Einstellungen

import os
import logging
import time
import yaml

# 创建logger对象
Logger = logging.getLogger('m_logger')
logging.getLogger().setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()  # 输出到控制台
Logger.addHandler(console_handler)

# -------------需要确定---------------
default_settings = {
    
    
    "config_version": 6,  # 版本号 本地如果版本号不同覆盖本地设置数据所以要提醒用户!
    "is_open_log_file": True,  # 是否输出日志文件
    "is_open_debug": False,  # 是否开启gui debug模式
    "serial_list": [
        {
    
    "serial_port": "COM8", "baud_rate": "1200"},
        {
    
    "serial_port": "COM7", "baud_rate": "1200"},
    ],
}
# 保存设置目录
settings_folder = './user_settings'
# 保存日志文件目录
log_file_name = './log'
settings_name = 'config.yaml'

# -------------本地变量不可修改---------------
# 是否读取完成本地配置
settings_is_loading_file = False
# 是否设置完成日志文件handler
settings_is_log_output_file = False


def update_settings(obj):
    global default_settings, settings_folder, settings_name

    default_settings = obj
    if not os.path.exists(settings_folder):
        os.makedirs(settings_folder)
    with open(settings_folder + '/' + settings_name, 'w', encoding="utf-8") as f:
        yaml.dump(obj, f)
    return True


def read_settings():
    """
    读取设置数据,优先读取本地设置数据(只读一次)
    :return:
    """
    global default_settings, settings_folder, settings_name, settings_is_loading_file, settings_is_log_output_file
    if not settings_is_loading_file:
        if not os.path.exists(settings_folder):
            # 第一次创建文件夹与文件
            try:
                os.makedirs(settings_folder)
                update_settings(default_settings)
            except:
                print('储存文件失败')
        else:
            # 读取
            with open(settings_folder + '/' + settings_name, 'r', encoding="utf-8") as f:
                default_settings_temp = yaml.load(f.read(), Loader=yaml.FullLoader)
                if default_settings_temp['config_version'] != default_settings['config_version']:
                    Logger.warning(
                        f"本地设置版本为{
      
      default_settings_temp['config_version']}与最新设置版本为{
      
      default_settings['config_version']}不同!重置本地设置!")
                    update_settings(default_settings)
                else:
                    Logger.warning(f"本地设置版本与最新设置版本都为{
      
      default_settings['config_version']}读取配置")
                    default_settings = default_settings_temp

        if default_settings['is_open_log_file'] and not settings_is_log_output_file:
            settings_is_log_output_file = True
            add_log_to_file()

        Logger.info("本地配置读取完成")
        settings_is_loading_file = True
    return default_settings


def add_log_to_file():
    # 创建一个handler,用于写入日志文件
    rq = time.strftime('%Y-%m-%d', time.localtime(time.time()))
    # log_date = rq[:10]
    log_path = log_file_name
    isExists = os.path.exists(log_path)
    # # 判断结果
    if not isExists:
        os.makedirs(log_path)
    log_name = f'{
      
      log_path}/{
      
      rq}.log'
    fh = logging.FileHandler(log_name, mode='a', encoding='utf-8')
    # 定义handler的输出格式
    formatter = logging.Formatter(
        '%(asctime)s - %(filename)s - line:%(lineno)d - %(levelname)s - %(message)s -%(process)s')
    fh.setFormatter(formatter)
    Logger.addHandler(fh)


read_settings()

if __name__ == '__main__':
    print(read_settings())
    Logger.debug('----调试信息 [debug]------')
    Logger.info('[info]')
    Logger.warning('警告信息[warning]')
    Logger.error('错误信息[error]')
    Logger.critical('严重错误信息[crtical]')

Guess you like

Origin blog.csdn.net/TY_GYY/article/details/129796193