【问题标题】:Python, printing over the same linePython,在同一行打印
【发布时间】:2021-08-12 12:19:49
【问题描述】:

我正在尝试打印我的程序所取得的进展,但出现了一个奇怪的错误。如果 for 循环需要很长时间才能完成,end = "\r" 似乎无法正常工作。

例如:

for i in range(6):
    print(f"Done {int(np.ceil(count*0.8))}% !", end = "\r")
    count += 1

打印Done 5% !

然而

for i in range(6):
    print(f"Done {int(np.ceil(count*0.8))}% !", end = "\r")
    count += 1
    time.sleep(2)

打印Done 1% !Done 2% !Done 3% !Done 4% !Done 4% !Done 5% !

在我的代码中,for 循环转了 70 秒,所以我认为没有正确打印进度更新的原因是因为它花费的时间太长? 我不确定这个问题的原因,这可能是什么原因造成的?

【问题讨论】:

  • 您在哪个应用程序中运行此代码?终端,IDE...?
  • 可能是当打印在短时间内发生时,它们被缓冲在一起,最终结果被打印出来;但是您运行代码的应用程序不支持回车,因此如果单独打印它们不会被覆盖。
  • 这不是在回答您的帖子,但可能会有所帮助。 tqdm 是一个 python 库,它完全可以完成您需要做的事情,即显示循环的进度。你可能想检查一下。

标签: python python-3.x loops for-loop printing


【解决方案1】:

这很可能是由于您执行代码的环境所致。这是一个例子:-

import sys

sys.stdout.write('Hello world\r')
sys.stdout.write('Hello world\n')

如果我在 Sublime Text 中运行它,我会看到两行:-

你好世界 世界你好

不是我所希望的。

但是,如果我从 zsh 终端 (macOS) 运行脚本,我会看到一行:-

世界你好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多