From 60cbf5a206090ed43278d48c621b3e204214dc4f Mon Sep 17 00:00:00 2001 From: AskaEth Date: Sat, 22 Aug 2026 13:40:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20rsync=20=E8=BF=9B=E5=BA=A6=E5=B8=A7?= =?UTF-8?q?=E5=AE=9E=E6=97=B6=E8=BE=93=E5=87=BA(stdbuf=E8=A1=8C=E7=BC=93?= =?UTF-8?q?=E5=86=B2)=20+=20=E6=99=AE=E9=80=9A=E6=97=A5=E5=BF=97=E8=A1=8C?= =?UTF-8?q?=E6=8E=A8=E9=80=81TUI=E6=97=A5=E5=BF=97=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- transfer.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/transfer.py b/transfer.py index d074e35..721faf4 100644 --- a/transfer.py +++ b/transfer.py @@ -450,7 +450,11 @@ class TaskRunner: append=(self.cfg.policy != "ask")) if self.cfg.backend == "tar": return ["bash", "-c", backend.build_cmd(self.cfg.source, self.cfg.dest, **kw)] - return backend.build_cmd(self.cfg.source, self.cfg.dest, **kw) + cmd = backend.build_cmd(self.cfg.source, self.cfg.dest, **kw) + if self.cfg.backend == "rsync": + # stdbuf 行缓冲: rsync progress2 帧逐行输出, 避免管道全缓冲攒帧 + return ["stdbuf", "-oL"] + cmd + return cmd # -- 输出分发 def _dispatch(self, line: str) -> None: @@ -498,9 +502,11 @@ class TaskRunner: self.stats.pct = pct self._emit_stats() return - if stripped.startswith(("./", "/", "-")) or "\t" in stripped: - pass # tar 文件条目 - self.lm.write(line) + # 兜底: 普通行写日志文件 + 推送到 TUI 日志栏 + if line.strip(): + self.lm.write(line) + if self.on_log: + self.on_log(line) def _merge_stats(self, st: ProgressStats) -> None: if st.bytes_done: