【发布时间】:2019-07-18 11:46:41
【问题描述】:
我想在 Jupyter notebook 中运行以下代码:
from time import sleep
print("Something I won't update.")
for i in range(10):
sleep(.5)
print("a%d\nb%d" % (i, i+1), end="\033[A\r")
目标结果如下:在时间i=0打印:
Something I won't update.
a0
b1
然后在时间i=1,上面的三行替换为:
Something I won't update.
a1
b2
等等等等……
这在终端中正常工作,但在我的笔记本中不能正常工作,其中 ANSI 转义 \033[A 被视为空字符 ''。换句话说,在 Jupyter 中,我得到了i=0:
Something I won't update.
a0
b1
在时间i=1,输出更新如下:
Something I won't update.
a0
a1
b2
__EDIT__
在 Stack Overflow 上也提出了类似的问题:
Overwrite previous output in jupyter notebookOverwrite previous output in Jupyter Notebook
How to overwrite the previous print line in Jupyter / IPythonHow to overwrite the previous print line in Jupyter IPython
但是,它们仅涵盖以下情况:
- 如何重写可以处理的单行:
import sys
from time import sleep
print("Something I won't update.")
for i in range(10):
sleep(.5)
sys.stdout.write("\r%d" % i)
这不适用于段落(多行)。行为与上述相同。
- 如何重写整个单元格:
from IPython.display import clear_output
from time import sleep
print("Something I won't update.")
for i in range(10):
sleep(.5)
clear_output(wait=True)
print("a%d\nb%d" % (i, i+1))
这里的行为不是我们想要的,因为Something I won't update. 行会消失。在更实际的用例中,我还有其他东西要显示,比如我不想删除的 matplotlib 图形。
这个问题的目的是为了能够重写几个特定的行。有没有办法在 Jupyter 中获得所需的行为?
【问题讨论】:
-
print("a%d\nb%d" % (i, i+1))可以
标签: python jupyter-notebook carriage-return