Python 标准输出、\r 进度条和 sshd 与 Putty 不定期更新

发布于 2024-08-29 21:58:56 字数 352 浏览 6 评论 0原文

我有一个非常简单的进度“栏”,使用如下所示的内容:

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 设置、sshd_config,还是我可以围绕它进行编码?

I have a dead simple progress "bar" using something like the following:

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)

Works fine, except over ssh with Putty. Putty only updates every 3 minutes or if a line ends with \n. Is this a Putty setting, sshd_config, or can I code around it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

静谧幽蓝 2024-09-05 21:58:56

尝试在 sys.stdout.write 调用后执行 sys.stdout.flush() 。

Try doing sys.stdout.flush() after sys.stdout.write call.

瑾兮 2024-09-05 21:58:56

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

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

You can use flush() to force an update.

sys.stdout.write('\r[%s%s]' % ('=' * completed, ' ' * (total-completed)))
sys.stdout.flush()
猛虎独行 2024-09-05 21:58:56

请使用 sys.stderr.write 来代替,它不会像 sys.stdout 那样进行缓冲,这样您就可以将进度指示器与(大概)有用的进程输出分开。

Use sys.stderr.write instead, which is not buffered as sys.stdout is, and this way you separate progress indicator from the (presumably) useful process output.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文