From bce9777eaeeac25221545ae4f72e1dbf9cc1b75d Mon Sep 17 00:00:00 2001 From: DLmaster361 Date: Wed, 27 Aug 2025 18:35:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dws=E6=96=AD=E5=BC=80?= =?UTF-8?q?=E6=97=B6=E5=90=8E=E7=AB=AF=E6=97=A0=E6=B3=95=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/config.py | 2 ++ app/services/system.py | 8 ++++---- main.py | 34 ++++++++++++++++++++++++++++++++-- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/app/core/config.py b/app/core/config.py index 237a189..eee07db 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -23,6 +23,7 @@ import re import shutil import asyncio +import uvicorn import sqlite3 import calendar import requests @@ -584,6 +585,7 @@ class AppConfig(GlobalConfig): self.config_path.mkdir(parents=True, exist_ok=True) self.history_path.mkdir(parents=True, exist_ok=True) + self.server: Optional[uvicorn.Server] = None self.websocket: Optional[WebSocket] = None self.silence_dict: Dict[Path, datetime] = {} self.if_ignore_silence: List[uuid.UUID] = [] diff --git a/app/services/system.py b/app/services/system.py index d06c6b1..ca33d84 100644 --- a/app/services/system.py +++ b/app/services/system.py @@ -221,10 +221,10 @@ class _SystemHandler: ["rundll32.exe", "powrprof.dll,SetSuspendState", "0,1,0"] ) - elif mode == "KillSelf": + elif mode == "KillSelf" and Config.server is not None: logger.info("执行退出主程序操作") - sys.exit(0) + Config.server.should_exit = True elif sys.platform.startswith("linux"): @@ -247,10 +247,10 @@ class _SystemHandler: logger.info("执行睡眠操作") subprocess.run(["systemctl", "suspend"]) - elif mode == "KillSelf": + elif mode == "KillSelf" and Config.server is not None: logger.info("执行退出主程序操作") - sys.exit(0) + Config.server.should_exit = True async def kill_emulator_processes(self): """这里暂时仅支持 MuMu 模拟器""" diff --git a/main.py b/main.py index 017017f..22b88db 100644 --- a/main.py +++ b/main.py @@ -23,6 +23,7 @@ import os import sys import ctypes +import logging from pathlib import Path current_dir = Path(__file__).resolve().parent @@ -34,6 +35,24 @@ from app.utils import get_logger logger = get_logger("主程序") +class InterceptHandler(logging.Handler): + def emit(self, record): + # 获取对应 loguru 的 level + try: + level = logger.level(record.levelname).name + except ValueError: + level = record.levelno + # 转发日志 + logger.opt(depth=6, exception=record.exc_info).log(level, record.getMessage()) + + +# 拦截标准 logging +logging.basicConfig(handlers=[InterceptHandler()], level=0, force=True) +for name in ("uvicorn", "uvicorn.error", "uvicorn.access", "fastapi"): + logging.getLogger(name).handlers = [InterceptHandler()] + logging.getLogger(name).propagate = False + + def is_admin() -> bool: """检查当前程序是否以管理员身份运行""" try: @@ -75,7 +94,6 @@ def main(): logger.info("主业务定时器已关闭") logger.info("AUTO_MAA 后端程序关闭") - logger.info("----------------END----------------") from fastapi.middleware.cors import CORSMiddleware from app.api import ( @@ -113,7 +131,19 @@ def main(): app.include_router(history_router) app.include_router(setting_router) - uvicorn.run(app, host="0.0.0.0", port=36163) + async def run_server(): + + config = uvicorn.Config( + app, host="0.0.0.0", port=36163, log_level="info", log_config=None + ) + server = uvicorn.Server(config) + + from app.core import Config + + Config.server = server + await server.serve() + + asyncio.run(run_server()) else: