IPhython Notebook Clear Cell Ausgabe im Code

132

In einem iPython-Notebook habe ich eine while-Schleife, die einen seriellen Anschluss und printdie empfangenen Daten in Echtzeit abhört .

Was ich erreichen möchte, um nur die zuletzt empfangenen Daten anzuzeigen (dh nur eine Zeile mit den neuesten Daten. Kein Scrollen im Zellenausgabebereich)

Ich muss (glaube ich) die alte Zellenausgabe löschen, wenn ich neue Daten empfange, und dann die neuen Daten drucken. Ich frage mich, wie ich alte Daten programmgesteuert löschen kann.

Aha
quelle

Antworten:

265

Mit können Sie IPython.display.clear_outputdie Ausgabe einer Zelle löschen.

from IPython.display import clear_output

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

Am Ende dieser Schleife sehen Sie nur eine Hello World!.

Ohne ein Codebeispiel ist es nicht einfach, Ihnen Arbeitscode zu geben. Wahrscheinlich ist das Puffern der letzten n Ereignisse eine gute Strategie. Wenn sich der Puffer ändert, können Sie die Ausgabe der Zelle löschen und den Puffer erneut drucken.

cel
quelle
1
Einfachste Ajax-Oberfläche aller Zeiten!
Unni
60
Die Verwendung von clear_output(wait=True)wird das Ergebnis im Allgemeinen schöner machen, wenn Sie sich clear_outputin einer Schleife befinden.
Toke Faurby
1
Die Hälfte des Bildschirms nach dem Druckergebnis wackelt, aber dank der Wartezeit = True
B.Mr.W.
1
Warum schleifen wir? Was ist mit i?
jorijnsmit
1
@jorijnsmit, nur um zu veranschaulichen, dass "Hallo Welt!" wird nicht 10 mal gedruckt, sondern nur 1 mal. iist nicht wirklich wichtig.
Cel
2

Und falls Sie wie ich hierher kommen und das Gleiche für Diagramme in einem Julia-Notizbuch in Jupyter mit Plots tun möchten, können Sie Folgendes verwenden:

    IJulia.clear_output(true)

also für eine Art animierte Handlung mehrerer Läufe

    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

Ohne den Aufruf clear_output werden alle Diagramme separat angezeigt.

Marzetti
quelle
2

Sie können IPython.display.clear_output verwenden , um die Ausgabe zu löschen, wie in der Antwort von cel erwähnt. Ich würde hinzufügen, dass für mich die beste Lösung darin bestand, diese Kombination von Parametern zum Drucken ohne "Wackeln" des Notebooks zu verwenden:

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print(i, flush=True)
hof.and.or
quelle