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?

Aha
źródło

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.

cel
źródło
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.

marzetti
źródło
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)
hof.and.or
źródło