【问题标题】:How to repositon cursor while printing in Jupyter notebook如何在 Jupyter 笔记本中打印时重新定位光标
【发布时间】: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 中获得所需的行为?

【问题讨论】:

标签: python jupyter-notebook carriage-return


【解决方案1】:

在 jupyter notebook 中试试这个

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))

【讨论】:

  • 感谢您的回答,但此解决方案不适用于我的情况(请参阅我的问题的最后一段):我只想重写打印的特定部分
猜你喜欢
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
相关资源
最近更新 更多