สมุดบันทึก ipython ล้างเอาต์พุตเซลล์ในรหัส


133

ในโน้ตบุ๊ก iPython ฉันมี while loop ที่ฟังพอร์ต Serial และprintข้อมูลที่ได้รับแบบเรียลไทม์

สิ่งที่ฉันต้องการบรรลุเพื่อแสดงเฉพาะข้อมูลที่ได้รับล่าสุด (เช่นบรรทัดเดียวเท่านั้นที่แสดงข้อมูลล่าสุดไม่มีการเลื่อนในพื้นที่เอาต์พุตของเซลล์)

สิ่งที่ฉันต้องการ (ฉันคิดว่า) คือการล้างเอาต์พุตเซลล์เก่าเมื่อฉันได้รับข้อมูลใหม่จากนั้นพิมพ์ข้อมูลใหม่ ฉันสงสัยว่าฉันจะล้างข้อมูลเก่าโดยใช้โปรแกรมได้อย่างไร

คำตอบ:


267

คุณสามารถใช้IPython.display.clear_outputเพื่อล้างผลลัพธ์ของเซลล์

from IPython.display import clear_output

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

Hello World!ในตอนท้ายของวงนี้คุณจะเห็นเฉพาะหนึ่ง

หากไม่มีตัวอย่างโค้ดก็ไม่ใช่เรื่องง่ายที่จะให้รหัสที่ใช้งานได้ การบัฟเฟอร์ n เหตุการณ์ล่าสุดอาจเป็นกลยุทธ์ที่ดี เมื่อใดก็ตามที่บัฟเฟอร์เปลี่ยนแปลงคุณสามารถล้างเอาต์พุตของเซลล์และพิมพ์บัฟเฟอร์อีกครั้ง


1
อินเตอร์เฟซ ajax ที่ง่ายที่สุดเท่าที่เคยมีมา!
Unni

60
การใช้clear_output(wait=True)เจตจำนงโดยทั่วไปจะทำให้ได้ผลลัพธ์ที่ดีกว่าถ้าคุณclear_outputอยู่ในลูป
Toke Faurby

1
ครึ่งหนึ่งของหน้าจอหลังจากผลงานพิมพ์สั่น แต่สั่นน้อยลงด้วยการรอ = True
B.Mr.W.

1
ทำไมเราถึงวนลูป? กับiอะไร?
jorijnsmit

2
@jorijnsmit เพียงเพื่อแสดงให้เห็นว่า "Hello World!" ไม่ได้พิมพ์ 10 ครั้ง แต่เพียง 1 ครั้ง iไม่สำคัญจริงๆ
cel

2

และในกรณีที่คุณมาที่นี่เช่นฉันต้องการทำสิ่งเดียวกันกับพล็อตในสมุดบันทึก Julia ใน Jupyter โดยใช้ Plots คุณสามารถใช้:

    IJulia.clear_output(true)

ดังนั้นสำหรับพล็อตภาพเคลื่อนไหวที่มีการวิ่งหลายครั้ง

    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

หากไม่มีการเรียก clear_output แปลงทั้งหมดจะปรากฏแยกกัน


2

คุณสามารถใช้IPython.display.clear_outputเพื่อล้างเอาต์พุตตามที่กล่าวไว้ในคำตอบของ cel ฉันจะเพิ่มว่าสำหรับฉันวิธีแก้ปัญหาที่ดีที่สุดคือใช้การรวมกันของพารามิเตอร์นี้เพื่อพิมพ์โดยไม่มี "ความสั่นคลอน" ของโน้ตบุ๊ก:

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print(i, flush=True)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.