# -*- coding: utf-8 -*- """加强 verify_all 的残留清理。 问题: 套件里各测试会临时起 relay.py / java 进程。 Stop-Strays 原来只清 run_agent 和 run_stub, 漏掉的 relay.py 如果没及时退出,端口就占着 —— 下一个测试连不上自己的服务,报出"假失败" (实测:单跑 9/9 和 69/69,套件里却 FAIL)。 改动: 1. 也清掉命令行里带 `_tests` 或 `relay.py` 的 python 进程 2. 也清掉 Java 测试进程 3. 清完等一下,确认关键端口真的空了 """ from __future__ import annotations import sys from pathlib import Path VERIFY = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\_tests" r"\verify_all.ps1") OLD = '''function Stop-Strays { Get-Process ykxmz -ErrorAction SilentlyContinue | ForEach-Object { Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue } Get-Process python, pythonw -ErrorAction SilentlyContinue | Where-Object { $_.Id -ne $PID } | ForEach-Object { $line = (Get-CimInstance Win32_Process -Filter "ProcessId=$($_.Id)" -ErrorAction SilentlyContinue).CommandLine if ($line -and ($line -match 'run_agent' -or $line -match 'run_stub')) { Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue } } Start-Sleep -Milliseconds 800 }''' NEW = '''function Stop-Strays { Get-Process ykxmz -ErrorAction SilentlyContinue | ForEach-Object { Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue } # 各测试会临时起 relay.py / stub / java。 # 只清 run_agent/run_stub 是不够的 —— 漏掉的 relay.py 如果没及时退出, # 端口就占着,下一个测试起不来,报出"假失败" # (实测:chunked 单跑 9/9、协议单跑 69/69,套件里却 FAIL)。 Get-Process python, pythonw -ErrorAction SilentlyContinue | Where-Object { $_.Id -ne $PID } | ForEach-Object { $line = (Get-CimInstance Win32_Process -Filter "ProcessId=$($_.Id)" -ErrorAction SilentlyContinue).CommandLine if ($line -and ($line -match 'run_agent' -or $line -match 'run_stub' ` -or $line -match 'relay\\.py' -or $line -match '_tests')) { Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue } } # Java 测试进程(JavaClientTest / JavaRelayTest) Get-Process java -ErrorAction SilentlyContinue | ForEach-Object { $line = (Get-CimInstance Win32_Process -Filter "ProcessId=$($_.Id)" -ErrorAction SilentlyContinue).CommandLine if ($line -and ($line -match 'JavaClientTest' -or $line -match 'JavaRelayTest')) { Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue } } # 等到关键端口真的空出来(最多 6 秒),别让下一个测试撞上 for ($i = 0; $i -lt 12; $i++) { $busy = $false foreach ($p in 8765, 8766, 8799, 8130, 8140) { if (Get-NetTCPConnection -LocalPort $p -State Listen -ErrorAction SilentlyContinue) { $busy = $true } if (Get-NetUDPEndpoint -LocalPort $p -ErrorAction SilentlyContinue) { $busy = $true } } if (-not $busy) { break } Start-Sleep -Milliseconds 500 } Start-Sleep -Milliseconds 300 }''' def main() -> int: raw = VERIFY.read_bytes() had_bom = raw.startswith(b"\xef\xbb\xbf") text = raw.decode("utf-8-sig") if "JavaClientTest" in text.split("function Stop-Strays")[1].split("}")[0]: print(" 已经加强过") return 0 if OLD not in text: print(" [失败] 锚点没找到") return 1 text = text.replace(OLD, NEW, 1) VERIFY.write_bytes((b"\xef\xbb\xbf" if had_bom else b"") + text.replace("\r\n", "\n").encode("utf-8")) print(f" 已加强 Stop-Strays(BOM {'保留' if had_bom else '无'})") return 0 if __name__ == "__main__": sys.exit(main())