output della cella in chiaro del notebook ipython nel codice


132

In un notebook iPython, ho un ciclo while che ascolta una porta seriale e printi dati ricevuti in tempo reale.

Quello che voglio ottenere per mostrare solo gli ultimi dati ricevuti (cioè solo una riga che mostra i dati più recenti. Nessuno scorrimento nell'area di output della cella)

Ciò di cui ho bisogno (penso) è di cancellare l'output della vecchia cella quando ricevo nuovi dati e quindi stampa i nuovi dati. Mi chiedo come posso cancellare i vecchi dati a livello di codice?

Risposte:


265

È possibile utilizzare IPython.display.clear_outputper cancellare l'output di una cella.

from IPython.display import clear_output

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

Alla fine di questo ciclo ne vedrai solo uno Hello World!.

Senza un esempio di codice non è facile darti un codice funzionante. Probabilmente il buffering degli ultimi n eventi è una buona strategia. Ogni volta che il buffer cambia, è possibile cancellare l'output della cella e stampare nuovamente il buffer.


1
L'interfaccia Ajax più semplice di sempre!
Unni,

60
L'uso della clear_output(wait=True)volontà generalmente rende il risultato più gradevole se si ha clear_outputall'interno di un ciclo.
Toke Faurby,

1
metà dello schermo dopo che il risultato di stampa trema, ma scuoti meno grazie
all'attesa

1
Perché stiamo eseguendo il loop? Con cosa i?
jorijnsmit,

1
@jorijnsmit, solo per illustrare che "Hello World!" non viene stampato 10 volte, ma solo 1 volta. inon importa davvero.
cel

2

E nel caso in cui tu venga qui, come ho fatto io, cercando di fare la stessa cosa per le trame in un taccuino Julia in Jupyter, usando le trame, puoi usare:

    IJulia.clear_output(true)

quindi per una specie di trama animata di più tirature

    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

Senza la chiamata clear_output, tutti i grafici vengono visualizzati separatamente.


2

È possibile utilizzare IPython.display.clear_output per cancellare l'output come indicato nella risposta di cel. Aggiungo che per me la soluzione migliore è stata quella di utilizzare questa combinazione di parametri per stampare senza alcuna "confusione" del notebook:

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print(i, flush=True)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.