Вывод четких ячеек записной книжки ipython в коде

133

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

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

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

Ага
источник

Ответы:

267

Вы можете использовать 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 событий - хорошая стратегия. Всякий раз, когда буфер изменяется, вы можете очистить вывод ячейки и снова распечатать буфер.

чел
источник
1
Самый простой интерфейс ajax!
Unni
60
Использование, как clear_output(wait=True)правило, делает результат лучше, если у вас есть clear_outputцикл.
Toke Faurby 08
1
половина экрана после результата печати трясется, но трясется меньше благодаря wait = True
B.Mr.W.
1
Почему мы зацикливаемся? Что с i?
jorijnsmit
2
@jorijnsmit, просто чтобы проиллюстрировать это "Hello World!" печатается не 10 раз, а 1 раз. iне имеет значения.
чел
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 все графики появляются отдельно.

marzetti
источник
2

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

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print(i, flush=True)
hof.and.or
источник