web-dev-qa-db-fra.com

ipython notebook sortie de cellule claire dans le code

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

Ce que je veux réaliser pour afficher uniquement 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) est d'effacer l'ancienne sortie de la cellule lorsque je reçois de nouvelles données, puis imprime les nouvelles données. Je me demande comment puis-je effacer les anciennes données par programmation?

98
aha

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

_from IPython.display import clear_output

for i in range(10):
    clear_output()
    print("Hello World!")
_

À la fin de cette boucle, vous ne verrez qu’un seul _Hello World!_.

Sans exemple de code, il n'est pas facile de vous donner du code de travail. 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 l'imprimer à nouveau.

212
cel

Et au cas où vous viendriez ici, comme moi, cherchant à faire la même chose pour les parcelles d'un carnet Julia à Jupyter, à l'aide de Parcelles, vous pouvez utiliser:

    IJulia.clear_output(true)

donc pour une sorte de complot animé de plusieurs exécutions

    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.

0
marzetti