Notebook ipython w postaci kodu


132

W notebooku iPython mam pętlę while, która nasłuchuje portu szeregowego i printodbieranych danych w czasie rzeczywistym.

Co chcę osiągnąć, aby wyświetlać tylko najnowsze otrzymane dane (tj. Tylko jeden wiersz przedstawiający najnowsze dane. Bez przewijania w obszarze wyjściowym komórki)

To, czego potrzebuję (myślę), to wyczyścić dane wyjściowe ze starej komórki, gdy otrzymam nowe dane, a następnie wydrukuję nowe dane. Zastanawiam się, jak programowo wyczyścić stare dane?

Odpowiedzi:


265

Możesz użyć, IPython.display.clear_outputaby wyczyścić dane wyjściowe komórki.

from IPython.display import clear_output

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

Na końcu tej pętli zobaczysz tylko jeden Hello World!.

Bez przykładu kodu nie jest łatwo podać działający kod. Prawdopodobnie buforowanie ostatnich n wydarzeń to dobra strategia. Za każdym razem, gdy bufor się zmieni, możesz wyczyścić dane wyjściowe komórki i ponownie wydrukować bufor.


1
Najprostszy interfejs Ajax w historii!
Unni

60
Użycie clear_output(wait=True)woli ogólnie sprawi, że wynik będzie ładniejszy, jeśli masz clear_outputwewnątrz pętlę.
Toke Faurby

1
połowa ekranu po wydrukowaniu się trzęsie, ale drży mniej dzięki funkcji wait = True
B.Mr.W.

1
Dlaczego zapętlamy? O co chodzi i?
jorijnsmit

1
@jorijnsmit, żeby zilustrować, że „Hello World!” nie jest drukowane 10 razy, ale tylko 1 raz. inie ma znaczenia.
cel

2

A gdybyś tu przyjechał, tak jak ja, chcąc zrobić to samo dla wykresów w notatniku Julia w Jupyter, używając Działki, możesz użyć:

    IJulia.clear_output(true)

więc dla rodzaju animowanej fabuły z wieloma przebiegami

    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

Bez wywołania clear_output wszystkie wykresy pojawiają się osobno.


2

Możesz użyć IPython.display.clear_output, aby wyczyścić dane wyjściowe, jak wspomniano w odpowiedzi cel. Dodam, że dla mnie najlepszym rozwiązaniem było użycie takiej kombinacji parametrów, aby drukować bez "drgań" notebooka:

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print(i, flush=True)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.