完善tidevice逻辑

This commit is contained in:
2025-09-23 20:17:33 +08:00
parent b0525ce817
commit 0d2782ddb8
13 changed files with 144 additions and 49 deletions

View File

@@ -6,11 +6,9 @@ import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from pathlib import Path
from typing import Dict, Optional, List
import wda
from tidevice import Usbmux, ConnectionType
from tidevice._device import BaseDevice
from Entity.DeviceModel import DeviceModel
from Module.FlaskSubprocessManager import FlaskSubprocessManager
from Utils.LogManager import LogManager
@@ -19,15 +17,12 @@ from Utils.LogManager import LogManager
class DeviceInfo:
def __init__(self):
self._port = 9110
self._models: Dict[str, DeviceModel] = {} # udid -> model
self._procs: Dict[str, subprocess.Popen] = {} # udid -> iproxy proc
self._models: Dict[str, DeviceModel] = {}
self._procs: Dict[str, subprocess.Popen] = {}
self._manager = FlaskSubprocessManager.get_instance()
self._iproxy_path = self._find_iproxy()
self._pool = ThreadPoolExecutor(max_workers=6)
# 可选10 秒一次扫野进程
threading.Thread(target=self._janitor, daemon=True).start()
# ---------------- 主循环 ----------------
def listen(self):
while True:
@@ -89,13 +84,20 @@ class DeviceInfo:
except Exception:
return 828, 1792, 2.0
...
# ---------------- 原来代码不变,只替换下面一个函数 ----------------
def _start_iproxy(self, udid: str, port: int) -> Optional[subprocess.Popen]:
try:
# 隐藏窗口的核心参数
kw = {"creationflags": subprocess.CREATE_NO_WINDOW}
return subprocess.Popen(
[self._iproxy_path, "-u", udid, str(port), "9100"],
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
**kw
)
except Exception:
except Exception as e:
print(e)
return None
def _kill(self, proc: Optional[subprocess.Popen]):
@@ -124,16 +126,11 @@ class DeviceInfo:
base = Path(__file__).resolve().parent.parent
name = "iproxy.exe"
path = base / "resources" / "iproxy" / name
print(str(path))
if path.is_file():
return str(path)
raise FileNotFoundError(f"iproxy 不存在: {path}")
# ---------------- janitor扫野进程 ----------------
def _janitor(self):
while True:
time.sleep(10)
self._cleanup_orphan_iproxy()
# ------------ Windows 专用:列出所有 iproxy 命令行 ------------
def _get_all_iproxy_cmdlines(self) -> List[str]:
try: