Вывод ячеек ячеек ipython в коде

В ноутбуке iPython у меня есть цикл while, который слушает последовательный порт и print полученные данные в реальном времени.

Что я хочу достичь, чтобы показывать только последние полученные данные (т.е. только одна строка, показывающая самые последние данные, без прокрутки в области вывода ячеек)

Мне нужно (я думаю), чтобы очистить вывод старой ячейки, когда я получаю новые данные, а затем печатает новые данные. Мне интересно, как я могу очистить старые данные программным путем?

Ответ 1

Вы можете использовать IPython.display.clear_output, чтобы очистить вывод ячейки.

from IPython.display import clear_output

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

В конце этого цикла вы увидите только один Hello World!.

Без примера кода вам нелегко дать вам рабочий код. Вероятно, буферизация последних n событий - хорошая стратегия. Всякий раз, когда изменяется буфер, вы можете очистить выход ячейки и снова распечатать буфер.

Ответ 2

И в случае, если вы придете сюда, как я, желая сделать то же самое для графиков в записной книжке Julia в Jupyter, используя Plots, вы можете использовать:

    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 все графики отображаются отдельно.

Ответ 3

Вы можете использовать IPython.display.clear_output, чтобы очистить вывод, как указано в ответе cel. Я бы добавил, что для меня лучшим решением было бы использовать эту комбинацию параметров для печати без каких-либо "дрожаний" ноутбука:

from IPython.display import clear_output

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