2026-06-05 09:34:29 +08:00
|
|
|
|
# -*-coding:utf-8 -*-
|
|
|
|
|
|
import configparser
|
|
|
|
|
|
import os
|
|
|
|
|
|
import sys
|
|
|
|
|
|
from audioop import error
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-06-06 09:16:49 +08:00
|
|
|
|
def get_config_paths():
|
|
|
|
|
|
"""返回所有可能的 config.ini 路径(按优先级排序)"""
|
|
|
|
|
|
paths = []
|
|
|
|
|
|
|
|
|
|
|
|
# 1. exe 同级目录(用户手动放置或外部修改)
|
|
|
|
|
|
exe_dir = os.path.dirname(sys.executable) if getattr(sys, 'frozen', False) else None
|
|
|
|
|
|
if exe_dir:
|
|
|
|
|
|
paths.append(os.path.join(exe_dir, 'config.ini'))
|
|
|
|
|
|
|
|
|
|
|
|
# 2. PyInstaller 资源目录 (_MEIPASS,打包时 datas 复制进来的)
|
|
|
|
|
|
meipass = getattr(sys, '_MEIPASS', None)
|
|
|
|
|
|
if meipass:
|
|
|
|
|
|
paths.append(os.path.join(meipass, 'config.ini'))
|
|
|
|
|
|
|
|
|
|
|
|
# 3. PubLibrary 目录下(优先查找)
|
|
|
|
|
|
pub_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
|
pub_path = os.path.join(pub_dir, 'config.ini')
|
|
|
|
|
|
if pub_path not in paths:
|
|
|
|
|
|
paths.append(pub_path)
|
|
|
|
|
|
|
|
|
|
|
|
# 4. 项目根目录下(开发环境备用)
|
|
|
|
|
|
project_root = os.path.dirname(pub_dir)
|
|
|
|
|
|
root_path = os.path.join(project_root, 'config.ini')
|
|
|
|
|
|
if root_path not in paths:
|
|
|
|
|
|
paths.append(root_path)
|
|
|
|
|
|
|
|
|
|
|
|
return paths
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def IniWrite(section, keyname, value):
|
|
|
|
|
|
exe_dir = os.path.dirname(sys.executable) if getattr(sys, 'frozen', False) else None
|
|
|
|
|
|
base_dir = exe_dir if exe_dir else os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
|
IniFileName = os.path.join(base_dir, 'config.ini')
|
|
|
|
|
|
|
2026-06-05 09:34:29 +08:00
|
|
|
|
config = configparser.ConfigParser()
|
2026-06-06 09:16:49 +08:00
|
|
|
|
try:
|
|
|
|
|
|
with open(IniFileName, 'r', encoding='utf-8') as f:
|
|
|
|
|
|
config.read_file(f)
|
|
|
|
|
|
except FileNotFoundError:
|
|
|
|
|
|
pass
|
|
|
|
|
|
with open(IniFileName, 'w', encoding='utf-8') as configfile:
|
2026-06-05 09:34:29 +08:00
|
|
|
|
if not config.has_section(section):
|
|
|
|
|
|
config.add_section(section)
|
2026-06-06 09:16:49 +08:00
|
|
|
|
config[section][keyname] = str(value)
|
2026-06-05 09:34:29 +08:00
|
|
|
|
config.write(configfile)
|
|
|
|
|
|
|
2026-06-06 09:16:49 +08:00
|
|
|
|
def IniRead(section, key, default=None):
|
|
|
|
|
|
fallback = default if default is not None else '5'
|
2026-06-05 09:34:29 +08:00
|
|
|
|
|
2026-06-06 09:16:49 +08:00
|
|
|
|
for path in get_config_paths():
|
|
|
|
|
|
if os.path.exists(path):
|
|
|
|
|
|
try:
|
|
|
|
|
|
config = configparser.ConfigParser()
|
|
|
|
|
|
with open(path, 'r', encoding='utf-8') as f:
|
|
|
|
|
|
config.read_file(f)
|
|
|
|
|
|
if config.has_section(section):
|
|
|
|
|
|
# print(f"[IniRead] 找到配置 [{section}] {key} -> {config[section][key]} (来源: {path})")
|
|
|
|
|
|
return config[section][key]
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
print(f"[IniRead] 读取失败 {path}: {e}")
|
|
|
|
|
|
return fallback
|