【问题标题】:Jupyter notebook carriage return not working [duplicate]Jupyter笔记本回车不起作用[重复]
【发布时间】:2018-12-16 21:32:35
【问题描述】:

我正在尝试使用 end=\rprint() 打印进度条,但 Jupyter 笔记本输出仍然有新行。

for i in range(0, 100000):
    print(i, end='\r')

输出:

2478
4867
6957
8970
11405
...

我在 Ubuntu 18.04 上运行服务器,并在 Mac 上使用 Chrome 访问它。如何使回车起作用?

【问题讨论】:

  • 您能否包含您期望看到的确切输出?
  • @trincot - 使用 '\r',每个输出都应该覆盖前一个。所以输出应该是999999
  • 您能否在问题中添加该信息

标签: python jupyter-notebook


【解决方案1】:

您的代码没有任何问题。在普通的 Ubuntu 18 / Python3 中运行,它的行为符合预期。

这是某种缓冲问题(或 Jupyter 中的错误)。

根据@unutbu 发布的链接,似乎只需要一点时间延迟就可以让 Jupyter 恢复正常。

import time
for i in range(100000):
    print(i, end='\r')
    time.sleep(0)  # EDIT, somehow even this works too.
print("")  

显然,如果您确实有大量输出(例如 100k 行),那么这远非理想。但真正的延迟在于屏幕的刷新和重绘,而不是实际的time.sleep()

如果您在快速重复循环中执行此类操作,最好每隔几秒(左右)只更新一次进度条。这可以通过检查时间增量来完成。

【讨论】:

  • @MarkMeyer - 也许在打印后添加sys.stdout.flush()?你在用 Python3 吗?
  • 在 jupyter lab 1.2.3 中不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 2018-03-22
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多