コードでipythonノートブックのセル出力をクリアする


132

iPythonノートブックで、シリアルポートとprint受信データをリアルタイムでリッスンするwhileループがあります。

最新の受信データのみを表示するために達成したいこと(つまり、最新のデータを示す1行のみ。セル出力領域でのスクロールなし)

新しいデータを受け取ったときに古いセルの出力をクリアして、新しいデータを印刷する必要があると思います。プログラムで古いデータをクリアするにはどうすればよいですか?

回答:


265

を使用IPython.display.clear_outputして、セルの出力をクリアできます。

from IPython.display import clear_output

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

このループの最後には、1つだけが表示されHello World!ます。

コード例がないと、動作するコードを提供するのは簡単ではありません。おそらく最新のn個のイベントをバッファリングすることは良い戦略です。バッファーが変更されるたびに、セルの出力をクリアしてバッファーを再度印刷できます。


1
これまでで最もシンプルなajaxインターフェース!
Unni 2017年

60
ループを使用している場合clear_output(wait=True)は、一般的にを使用すると結果が良くなりclear_outputます。
Toke Faurby 2017年

1
印刷結果が揺れた後の画面の半分ですが、wait = True
B.Mr.W.

1
なぜループするのですか?とは何iですか?
jorijnsmit

1
@jorijnsmit、「Hello World!」は10回印刷されず、1回だけ印刷されます。i本当に重要ではありません。
セル画

2

そして、あなたがここに来た場合、私がしたように、JupyterのJuliaノートブックで同じことを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呼び出しがないと、すべてのプロットが個別に表示されます。


2

セルの回答に記載されているように、IPython.display.clear_outputを使用して出力をクリアできます。私にとって最良の解決策は、このパラメータの組み合わせを使用して、ノートブックの「揺れ」なしで印刷することであると付け加えます。

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print(i, flush=True)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.