"""消息问答助手 — 入口""" import logging import os import sys import signal # 确保在项目目录 os.chdir(os.path.dirname(os.path.abspath(__file__))) # 配置日志 logging.basicConfig( level=logging.DEBUG, format="%(asctime)s [%(name)s] %(levelname)s: %(message)s", datefmt="%H:%M:%S", ) # 文件日志(持久化,便于排查) _fh = logging.FileHandler("msgbot.log", encoding="utf-8", mode="w") _fh.setLevel(logging.DEBUG) _fh.setFormatter(logging.Formatter("%(asctime)s [%(name)s] %(levelname)s: %(message)s")) # 过滤 comtypes 的 DEBUG 洪流 class ComtypesFilter(logging.Filter): def filter(self, record): return not record.name.startswith("comtypes") or record.levelno >= logging.WARNING _fh.addFilter(ComtypesFilter()) logging.getLogger().addHandler(_fh) logger = logging.getLogger("msgbot") def main(): logger.info("消息问答助手启动中...") # 动态导入 gui,避免 customtkinter 等缺失导致整个程序崩溃前无日志 try: from gui import MsgBotApp except ImportError as e: logger.error(f"导入 GUI 失败: {e}") logger.error("请先安装依赖: pip install -r requirements.txt") sys.exit(1) app = MsgBotApp() # Ctrl+C 信号处理:Windows Tkinter mainloop 不响应 KeyboardInterrupt # 需 signal handler 强制停止监控 + 退出 def _sigint_handler(sig, frame): logger.info("收到 Ctrl+C,正在关闭...") app.monitor.stop() app.quit() sys.exit(0) signal.signal(signal.SIGINT, _sigint_handler) app.mainloop() if __name__ == "__main__": main()