ipython笔记本清除代码中的单元格输出

aha*_*aha 102 python ipython ipython-notebook

在iPython笔记本中,我有一个while循环,它print实时监听串行端口和接收的数据.

我想要实现的只显示最新的接收数据(即只显示最新数据的一行.单元格输出区域没有滚动)

我需要(我认为)是在接收新数据时清除旧单元格输出,然后打印新数据.我想知道如何以编程方式清除旧数据?

cel*_*cel 222

您可以使用IPython.display.clear_output清除单元格的输出.

from IPython.display import clear_output

for i in range(10):
    clear_output()
    print("Hello World!")
Run Code Online (Sandbox Code Playgroud)

在这个循环结束时,你只会看到一个Hello World!.

没有代码示例,给你工作代码并不容易.可能缓冲最新的n个事件是一个很好的策略.每当缓冲区更改时,您可以清除单元格的输出并再次打印缓冲区.

  • 如果在循环中有`clear_output`,则使用`clear_output(wait = True)`通常会使结果更好. (55认同)
  • 但这会清除所有输出。有没有办法只清除最近的数字?编辑:这就是我正在寻找的:https://github.com/jupyter-widgets/ipywidgets/issues/1744#issuecomment-335179855 (2认同)
  • 我们为什么要循环?“我”是怎么回事? (2认同)
  • @jorijnsmit,只是为了说明“Hello World!” 不是打印10次,而是只打印1次。“我”并不重要。 (2认同)

小智 7

您可以使用IPython.display.clear_output清除 cel 回答中提到的输出。我想补充一点,对我来说,最好的解决方案是使用这种参数组合进行打印,而不会出现笔记本的任何“抖动”:

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print(i, flush=True)
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以使用这个简单的代码更好地可视化该函数clear_output(wait=True)

from IPython.display import clear_output
import time 

for i in range(10):
    clear_output(wait=True)
    print(i)
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)


小智 5

如果我没记错的话,您的意思是您只需要清除单元格的输出部分,这可能是有效的输出或一些您不再需要查看的错误。如果是!只需转到顶部功能区并选择单元格 > 当前输出 > 清除

  • 这应该适用于单元格的交互式清除,但 OP 要求采用编程方式来执行此操作。 (4认同)

Dee*_*hta 5

简单,如果您只想清除当前单元格的输出,只需在该单元格的末尾使用它

from IPython.display import clear_output
clear_output(wait=False)
Run Code Online (Sandbox Code Playgroud)