Python 简单的通用设置配置文件
import os
import logging
import time
import yaml
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,
"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
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():
rq = time.strftime('%Y-%m-%d', time.localtime(time.time()))
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')
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]')