Python stdout,\r 进度条与 Putty 的 sshd 不定期更新

1 投票
3 回答
1372 浏览
提问于 2025-04-15 22:01

我有一个非常简单的进度“条”,用的代码大概是这样的:

import sys
from time import sleep

current = 0
limit = 50
while current <= limit:
    sys.stdout.write('\rSynced %s/%s orders' % (current, limit))
    current_order += 1
    sleep(1)

这个在大多数情况下都能正常工作,但在用Putty通过ssh连接时就不行了。Putty每3分钟才更新一次,或者只有在一行以\n结尾时才会更新。这是Putty的设置问题,还是ssh的配置问题,或者我可以通过代码来解决这个问题呢?

3 个回答

0

可以使用 sys.stderr.write,因为它不像 sys.stdout 那样有缓冲区。这样做可以把进度指示和(可能是)有用的处理输出分开。

1

你可以使用 flush() 来强制更新。

sys.stdout.write('\r[%s%s]' % ('=' * completed, ' ' * (total-completed)))
sys.stdout.flush()
3

试着在调用 sys.stdout.write 之后加上 sys.stdout.flush()

撰写回答