sortie de cellule claire du notebook ipython dans le code

132

Dans un notebook iPython, j'ai une boucle while qui écoute un port série et printles données reçues en temps réel.

Ce que je veux réaliser pour n'afficher que les dernières données reçues (c'est-à-dire une seule ligne affichant les données les plus récentes. Pas de défilement dans la zone de sortie de la cellule)

Ce dont j'ai besoin (je pense), c'est d'effacer l'ancienne sortie de cellule lorsque je reçois de nouvelles données, puis d'imprimer les nouvelles données. Je me demande comment puis-je effacer les anciennes données par programme?

aha
la source

Réponses:

265

Vous pouvez utiliser IPython.display.clear_outputpour effacer la sortie d'une cellule.

from IPython.display import clear_output

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

À la fin de cette boucle, vous n'en verrez qu'un Hello World!.

Sans un exemple de code, il n'est pas facile de vous donner un code fonctionnel. La mise en mémoire tampon des n derniers événements est probablement une bonne stratégie. Chaque fois que le tampon change, vous pouvez effacer la sortie de la cellule et imprimer à nouveau le tampon.

cel
la source
1
L'interface ajax la plus simple jamais créée!
Unni
60
L'utilisation de clear_output(wait=True)rendra généralement le résultat plus agréable si vous avez clear_outputune boucle à l'intérieur.
Toke Faur du
1
la moitié de l'écran après le résultat de l'impression secoue, mais secoue moins grâce à l'attente = True
B.Mr.W.
1
Pourquoi bouclons-nous? Avec quoi i?
jorijnsmit
1
@jorijnsmit, juste pour illustrer ce "Hello World!" n'est pas imprimé 10 fois, mais juste 1 fois. in'a pas vraiment d'importance.
cel
2

Et si vous venez ici, comme moi, en cherchant à faire la même chose pour les tracés dans un cahier Julia dans Jupyter, en utilisant Plots, vous pouvez utiliser:

    IJulia.clear_output(true)

donc pour une sorte de tracé animé de plusieurs runs

    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

Sans l'appel clear_output, tous les tracés apparaissent séparément.

Marzetti
la source
2

Vous pouvez utiliser IPython.display.clear_output pour effacer la sortie comme mentionné dans la réponse de cel. J'ajouterais que pour moi, la meilleure solution était d'utiliser cette combinaison de paramètres pour imprimer sans aucune «tremblement» du notebook:

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print(i, flush=True)
hof.et.ou
la source