首页 > 解决方案 > 为什么打印函数中的 \r 不重写标准输出而是在下一行打印?

问题描述

我正在做一个机器学习项目,我想在标准输出中将模型的准确性和进度显示为不断更新的统计数据。但是,不是更新同一行,而是在(看似)随机次数的迭代后将统计信息打印在新行上。

我已经在一些更简单的代码上对其进行了测试。

for i in range(100000):
    print(str(i), end="\r")

我在 Jupyter Notebook 中得到的输出如下:

3181

6180

9180

12501

...

99999

总输出打印在许多行上。

from time import sleep

for i in range(100):
    sleep(0.1)
    print(str(i), end="\r")

上面的代码工作正常,并且数字在同一行不断更新。

for i in range(100000):
    print(str(i), end="\r")
    sys.stdout.flush()

上面的代码也有效,但是,它显着减慢了输出。该数字在同一行上更新,但是,它以较慢的速度更新,我认为这与缓冲区速度限制有关。

因此,我希望标准输出在同一行上更新,但也尽可能快地更新,因为两个确实有效的代码片段会显着降低显示输出的速度。

我对该模块没有太多经验sys,但在我看来这与我的本地设置有关。我运行 Windows 10、python 3.7.1,并且代码正在 Jupyter 笔记本上运行。

标签: pythonpython-3.xjupyter-notebookstdoutsys

解决方案


推荐阅读