# -*- coding: utf-8 -*- """把 verify_all.ps1 里「投图显示方式」这一步改成先落盘再判退出码。 原因:直接 & python xxx.py 2>&1 | Select-Object -Last 3 Record "..." ($LASTEXITCODE -eq 0) 在 verify_all 里会偶发把退出码判成非 0(单独跑同一命令却 10/10 正常), 而且失败时因为只留了最后 3 行,看不到是哪一项失败。 改成: & python xxx.py *> $log $code = $LASTEXITCODE # 立刻取走,避免被后续命令影响 显示 $log 的尾部(失败时显示全部) """ from __future__ import annotations import sys from pathlib import Path TARGET = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\_tests\verify_all.ps1") OLD = '''# ---------------------------------------------------------------- 2b Banner "2b/7 投图显示方式(屏幕中间 / 全屏 / 自定义大小)" Stop-Strays & python (Join-Path $root "_tests\\test_image_modes.py") 2>&1 | Select-Object -Last 3 Record "投图显示方式" ($LASTEXITCODE -eq 0)''' NEW = '''# ---------------------------------------------------------------- 2b Banner "2b/7 投图显示方式(屏幕中间 / 全屏 / 自定义大小)" Stop-Strays $imgLog = Join-Path $env:TEMP "lr_imgmode.txt" & python (Join-Path $root "_tests\\test_image_modes.py") *> $imgLog $imgCode = $LASTEXITCODE if ($imgCode -eq 0) { Get-Content $imgLog -Encoding UTF8 -ErrorAction SilentlyContinue | Select-Object -Last 3 } else { Write-Host "失败输出:" -ForegroundColor Red Get-Content $imgLog -Encoding UTF8 -ErrorAction SilentlyContinue | Where-Object { $_ -match "FAIL|通过|Traceback|Error" } } Record "投图显示方式" ($imgCode -eq 0)''' def main() -> int: raw = TARGET.read_bytes() bom = raw[:3] == b"\xef\xbb\xbf" text = raw.decode("utf-8-sig") if "$imgCode" in text: print(" 已经改过,跳过") return 0 if OLD not in text: print(" [失败] 锚点未找到,实际内容:") idx = text.find("2b/7") print(repr(text[max(0, idx - 120):idx + 320])) return 1 text = text.replace(OLD, NEW, 1) data = text.encode("utf-8") if bom: data = b"\xef\xbb\xbf" + data TARGET.write_bytes(data) print(" verify_all.ps1: 投图步骤改为落盘 + 立即取退出码") return 0 if __name__ == "__main__": sys.exit(main())