From a8d8c8ee5d71af85ebb503c82482a6e6c23859bd Mon Sep 17 00:00:00 2001 From: zw <12345678> Date: Wed, 20 Aug 2025 13:48:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug=E3=80=82=E4=B8=B4?= =?UTF-8?q?=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 17 +++++++++++++---- Entity/Variables.py | 2 +- Module/FlaskService.py | 32 +++++++++++++++++--------------- Module/FlaskSubprocessManager.py | 14 +++++++++++++- Module/Main.py | 5 +---- Utils/LogManager.py | 22 ++++++++++++++-------- 6 files changed, 59 insertions(+), 33 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 0826860..c37e3a3 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,13 +5,12 @@ - - + + - + + - + \ No newline at end of file diff --git a/Entity/Variables.py b/Entity/Variables.py index 362df7f..0952c32 100644 --- a/Entity/Variables.py +++ b/Entity/Variables.py @@ -4,7 +4,7 @@ from typing import Dict, Any from Entity.AnchorModel import AnchorModel # wda apple bundle id -WdaAppBundleId = "com.vv.wda.xctrunner" +WdaAppBundleId = "com.yolo.wda.xctrunner" # 全局主播列表 anchorList: list[AnchorModel] = [] # 线程锁 diff --git a/Module/FlaskService.py b/Module/FlaskService.py index 9478665..30053d3 100644 --- a/Module/FlaskService.py +++ b/Module/FlaskService.py @@ -6,6 +6,7 @@ import warnings from queue import Queue from typing import Any, Dict from Utils.AiUtils import AiUtils +from Utils.LogManager import LogManager from Utils.Requester import Requester import tidevice @@ -27,11 +28,12 @@ dataQueue = Queue() def start_socket_listener(): port = int(os.getenv('FLASK_COMM_PORT', 0)) + LogManager.info(f"Received port from environment: {port}") print(f"Received port from environment: {port}") if port <= 0: - print("⚠️ 未获取到通信端口,跳过Socket监听") + LogManager.info("未获取到通信端口,跳过Socket监听") + print("未获取到通信端口,跳过Socket监听") return - try: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: # 设置端口复用,避免端口被占用时无法绑定 @@ -41,30 +43,38 @@ def start_socket_listener(): try: s.bind(('127.0.0.1', port)) print(f"[INFO] Socket successfully bound to port {port}") + LogManager.info(f"[INFO] Socket successfully bound to port {port}") except Exception as bind_error: - print(f"[ERROR] ❌ 端口绑定失败: {bind_error}") + print(f"[ERROR]端口绑定失败: {bind_error}") + LogManager.info(f"[ERROR]端口绑定失败: {bind_error}") return # 开始监听 s.listen() + LogManager.info(f"[INFO] Socket listener started on port {port}, waiting for connections...") print(f"[INFO] Socket listener started on port {port}, waiting for connections...") - while True: try: + LogManager.info(f"[INFO] Waiting for a new connection on port {port}...") print(f"[INFO] Waiting for a new connection on port {port}...") conn, addr = s.accept() + LogManager.info(f"[INFO] Connection accepted from: {addr}") print(f"[INFO] Connection accepted from: {addr}") raw_data = conn.recv(1024).decode('utf-8').strip() + LogManager.info(f"[INFO] Raw data received: {raw_data}") print(f"[INFO] Raw data received: {raw_data}") data = json.loads(raw_data) + LogManager.info(f"[INFO] Parsed data: {data}") print(f"[INFO] Parsed data: {data}") dataQueue.put(data) except Exception as conn_error: - print(f"[ERROR] ❌ 连接处理失败: {conn_error}") + LogManager.error(f"[ERROR]连接处理失败: {conn_error}") + print(f"[ERROR]连接处理失败: {conn_error}") except Exception as e: - print(f"[ERROR] ❌ Socket服务启动失败: {e}") + LogManager.error(f"[ERROR]Socket服务启动失败: {e}") + print(f"[ERROR]Socket服务启动失败: {e}") # 在独立线程中启动Socket服务 @@ -83,15 +93,6 @@ def passToken(): print(e) return ResultData(data="").toJson() -@app.route('/getName', methods=['POST']) -def getName(): - data = request.get_json() - accountToken = data['token'] - print(accountToken) - return accountToken - - - # 获取设备列表 @app.route('/deviceList', methods=['GET']) def deviceList(): @@ -108,6 +109,7 @@ def deviceList(): return ResultData(data=listData).toJson() except Exception as e: print(e) + LogManager.error("获取设备列表失败:", e) return ResultData(data=[]).toJson() # 获取设备应用列表 diff --git a/Module/FlaskSubprocessManager.py b/Module/FlaskSubprocessManager.py index 2047c58..01f2e6b 100644 --- a/Module/FlaskSubprocessManager.py +++ b/Module/FlaskSubprocessManager.py @@ -9,6 +9,9 @@ import time from pathlib import Path from typing import Optional, Union, Dict, List +from Utils.LogManager import LogManager + + class FlaskSubprocessManager: _instance: Optional['FlaskSubprocessManager'] = None _lock: threading.Lock = threading.Lock() @@ -22,7 +25,7 @@ class FlaskSubprocessManager: def _init_manager(self): self.process: Optional[subprocess.Popen] = None - self.comm_port = 34567 + self.comm_port = 34566 self._stop_event = threading.Event() atexit.register(self.stop) @@ -37,6 +40,7 @@ class FlaskSubprocessManager: """启动 Flask 子进程(兼容打包后的 exe 和源码运行)""" with self._lock: if self.process is not None: + LogManager.warning("子进程正在运行中!") raise RuntimeError("子进程已在运行中!") env = os.environ.copy() @@ -59,6 +63,7 @@ class FlaskSubprocessManager: cmd = [sys.executable, "-m", "Module.Main", "--role=flask"] cwd = str(Path(__file__).resolve().parent) # Module 目录 + LogManager.info(f"[DEBUG] spawn: {cmd} (cwd={cwd}) exists(exe)={os.path.exists(cmd[0])}") print(f"[DEBUG] spawn: {cmd} (cwd={cwd}) exists(exe)={os.path.exists(cmd[0])}") self.process = subprocess.Popen( @@ -73,6 +78,8 @@ class FlaskSubprocessManager: env=env, cwd=cwd, ) + + LogManager.info(f"Flask子进程启动 (PID: {self.process.pid}, 端口: {self.comm_port})") print(f"Flask子进程启动 (PID: {self.process.pid}, 端口: {self.comm_port})") def print_output(stream, stream_name): @@ -97,9 +104,11 @@ class FlaskSubprocessManager: s.sendall((data + "\n").encode('utf-8')) return True except ConnectionRefusedError: + LogManager.error(f"连接被拒绝,确保子进程在端口 {self.comm_port} 上监听") print(f"连接被拒绝,确保子进程在端口 {self.comm_port} 上监听") return False except Exception as e: + LogManager.error(f"发送失败: {e}") print(f"发送失败: {e}") return False @@ -107,11 +116,14 @@ class FlaskSubprocessManager: with self._lock: if self.process and self.process.poll() is None: print(f"[INFO] Stopping Flask child process (PID: {self.process.pid})...") + LogManager.info(f"[INFO] Stopping Flask child process (PID: {self.process.pid})...") self.process.terminate() self.process.wait() print("[INFO] Flask child process stopped.") + LogManager.info("[INFO] Flask child process stopped.") self._stop_event.set() else: + LogManager.info("[INFO] No Flask child process to stop.") print("[INFO] No Flask child process to stop.") @classmethod diff --git a/Module/Main.py b/Module/Main.py index ea66da9..5999b17 100644 --- a/Module/Main.py +++ b/Module/Main.py @@ -1,6 +1,5 @@ import os import sys -import time from pathlib import Path from Module.DeviceInfo import Deviceinfo @@ -19,15 +18,13 @@ def _run_flask_role(): port = int(os.getenv("FLASK_COMM_PORT", "34567")) # 固定端口的兜底仍是 34567 app_factory = getattr(FlaskService, "create_app", None) app = app_factory() if callable(app_factory) else FlaskService.app - app.run(host="0.0.0.0", port=port, debug=False, use_reloader=False) + app.run(host="0.0.0.0", port=port + 1, debug=False, use_reloader=False) if "--role=flask" in sys.argv: _run_flask_role() sys.exit(0) # 项目入口 -# ... 省略前面的 import 和函数 ... - if __name__ == "__main__": # 清空日志等 LogManager.clearLogs() diff --git a/Utils/LogManager.py b/Utils/LogManager.py index fb6b53e..17649d8 100644 --- a/Utils/LogManager.py +++ b/Utils/LogManager.py @@ -2,6 +2,7 @@ import logging import os import sys import shutil +from pathlib import Path class LogManager: @@ -52,9 +53,10 @@ class LogManager: def error(cls, text, udid="system"): cls._setupLogger(udid, "errorLogger", "error.log", level=logging.ERROR).error(f"[{udid}] {text}") + # 清空日志 @classmethod def clearLogs(cls): - """启动时清空 log 目录""" + """启动时清空 log 目录下所有文件""" print("开始清空日志...") # 关闭所有 handler @@ -63,14 +65,18 @@ class LogManager: for handler in logger.handlers[:]: try: handler.close() - except: + except Exception: pass logger.removeHandler(handler) - # 删除并重建日志目录 - if os.path.exists(cls.logDir): - shutil.rmtree(cls.logDir) - print(f"删除了 {cls.logDir}") - os.makedirs(cls.logDir, exist_ok=True) - print(f"重新创建了 {cls.logDir}") + # 仅删除目录里的所有文件和子目录 + log_path = Path(cls.logDir) + if log_path.exists(): + for item in log_path.iterdir(): + if item.is_file(): + item.unlink() + elif item.is_dir(): + import shutil + shutil.rmtree(item) + print("日志清空完成")