notebook ipython output sel yang jelas dalam kode

132

Dalam notebook iPython, saya memiliki loop sementara yang mendengarkan port Serial dan printdata yang diterima secara real time.

Apa yang ingin saya capai hanya menampilkan data yang diterima terakhir (yaitu hanya satu baris yang menunjukkan data terbaru. Tidak ada gulir di area output sel)

Yang saya butuhkan (saya pikir) adalah untuk menghapus output sel yang lama ketika saya menerima data baru, dan kemudian mencetak data baru. Saya bertanya-tanya bagaimana cara menghapus data lama secara terprogram?

aha
sumber

Jawaban:

265

Anda dapat menggunakan IPython.display.clear_outputuntuk menghapus output sel.

from IPython.display import clear_output

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

Pada akhir loop ini Anda hanya akan melihat satu Hello World!.

Tanpa contoh kode, tidak mudah memberi Anda kode kerja. Mungkin buffering n peristiwa terbaru adalah strategi yang baik. Setiap kali buffer berubah, Anda dapat menghapus output sel dan mencetak buffer lagi.

cel
sumber
1
Antarmuka ajax paling sederhana yang pernah ada!
Unni
60
Menggunakan clear_output(wait=True)umumnya akan membuat hasil lebih baik jika Anda memiliki clear_outputdi dalam satu lingkaran.
Toke Faurby
1
setengah dari layar setelah hasil cetak bergetar, tetapi kurang goyang berkat menunggu = Benar
B.Mr.W.
1
Mengapa kita mengulang? Ada apa dengan ini i?
jorijnsmit
1
@jorijnsmit, hanya untuk menggambarkan "Hello World!" tidak dicetak 10 kali, tetapi hanya 1 kali. itidak masalah.
sel
2

Dan jika Anda datang ke sini, seperti yang saya lakukan, mencari untuk melakukan hal yang sama untuk plot di buku catatan Julia di Jupyter, menggunakan Plot, Anda dapat menggunakan:

    IJulia.clear_output(true)

jadi untuk semacam plot animasi beberapa berjalan

    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

Tanpa panggilan clear_output, semua plot muncul secara terpisah.

marzetti
sumber
2

Anda dapat menggunakan IPython.display.clear_output untuk menghapus output seperti yang disebutkan dalam jawaban cel. Saya akan menambahkan bahwa bagi saya solusi terbaik adalah menggunakan kombinasi parameter ini untuk mencetak tanpa "kegoyahan" notebook:

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print(i, flush=True)
hof.and.or
sumber