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 @@
-
-
+
+
-
@@ -101,13 +100,23 @@
+
+
+
+
+
+
+
+
+
+
-
+
\ 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("日志清空完成")