diff --git a/telemetry.py b/telemetry.py index 0ba1fdd..f68a1d1 100644 --- a/telemetry.py +++ b/telemetry.py @@ -93,6 +93,17 @@ def main(argv: Optional[List[str]] = None) -> int: return run(backend, device, args.interval) except KeyboardInterrupt: return 0 + except BrokenPipeError: + # 读端先走(管给 head,或 campaign 结束时收掉)。这是正常终止,不该在 + # telemetry.err 里留一段 traceback 让人以为遥测本身坏了。按 CPython 的 + # 惯用做法把 stdout 指到 devnull——只吞异常不够,解释器退出时还会 flush + # 一次,再抛一条 "Exception ignored" 到 stderr。 + try: + devnull = os.open(os.devnull, os.O_WRONLY) + os.dup2(devnull, sys.stdout.fileno()) + except Exception: + pass + return 0 if __name__ == "__main__":