在Jupyter Notebook中打印时如何在光标上存放信息

时间:2019-07-18 11:46:41

标签: python jupyter-notebook carriage-return

我想在Jupyter笔记本中运行以下代码:

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 __

关于堆栈溢出提出了类似的问题:

Overwrite previous output in jupyter notebook Overwrite previous output in Jupyter Notebook

How to overwrite the previous print line in Jupyter / IPython How 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中可以获得所需的行为吗?

1 个答案:

答案 0 :(得分:0)

在jupyter笔记本中尝试

from time import sleep
from IPython.display import clear_output
for i in range(10):
    sleep(.5)
    clear_output(wait=True)
    print("a%d\nb%d" % (i, i+1))