在iPython笔记本中,我有一个while循环,它侦听串行端口并实时打印接收到的数据。

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

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


你可以使用IPython.display。Clear_output清除单元格的输出。

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print("Hello World!")

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

如果没有代码示例,就不容易给出工作代码。缓冲最近的n个事件可能是一个不错的策略。当缓冲区发生变化时,您可以清除单元格的输出并再次打印缓冲区。


如果你来到这里,像我一样,想在Jupyter的Julia笔记本上做同样的事情,使用plot,你可以使用:

    IJulia.clear_output(true)

对于一个多次运行的动画情节

    if nrun==1  
      display(plot(x,y))         # first plot
    else 
      IJulia.clear_output(true)  # clear the window (as above)
      display(plot!(x,y))        # plot! overlays the plot
    end

如果没有clear_output调用,所有的图将单独显示。


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

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print(i, flush=True)

使用这段简单的代码,您可以更好地可视化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)

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


简单, 如果你想清除当前单元格的输出,只需要在该单元格的末尾使用这个

from IPython.display import clear_output
clear_output(wait=False)