"""从 Tee 输出的 CLI 文本中提取末尾 JSON,落盘为 summary.json。 官方演练目录由 run 命令产生 cli-output.txt(前面可能有 CUDA 警告), 本脚本只提取最后一个完整 JSON 对象,并核对 adjacent 的官方 result.json。 """ import argparse import json from pathlib import Path def extract(text: str) -> dict: start = text.rfind("\n{") if start < 0: raise ValueError("未找到 JSON 对象") return json.loads(text[start + 1:]) def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("folder", type=Path) args = parser.parse_args() folder = args.folder summary = extract((folder / "cli-output.txt").read_text(encoding="utf-8")) (folder / "summary.json").write_text( json.dumps(summary, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") print(json.dumps({ "folder": str(folder), "completed": summary["completed"], "virtual_time_s": summary["virtual_time_s"], "cleared_channels": summary["cleared_channels"], "total_requests": summary["total_requests"], }, ensure_ascii=False)) return 0 if __name__ == "__main__": raise SystemExit(main())