ipython máy tính xách tay rõ ràng đầu ra tế bào trong mã


132

Trong một máy tính xách tay iPython, tôi có một vòng lặp while lắng nghe một cổng Nối tiếp và printdữ liệu nhận được trong thời gian thực.

Những gì tôi muốn đạt được chỉ hiển thị dữ liệu nhận được mới nhất (nghĩa là chỉ có một dòng hiển thị dữ liệu gần đây nhất. Không cuộn trong khu vực đầu ra của tế bào)

Những gì tôi cần (tôi nghĩ) là để xóa đầu ra ô cũ khi tôi nhận được dữ liệu mới, và sau đó in dữ liệu mới. Tôi tự hỏi làm thế nào tôi có thể xóa dữ liệu cũ lập trình?

Câu trả lời:


265

Bạn có thể sử dụng IPython.display.clear_outputđể xóa đầu ra của một ô.

from IPython.display import clear_output

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

Vào cuối vòng lặp này, bạn sẽ chỉ nhìn thấy một Hello World!.

Không có ví dụ về mã, không dễ để cung cấp cho bạn mã làm việc. Có lẽ đệm các sự kiện n mới nhất là một chiến lược tốt. Bất cứ khi nào bộ đệm thay đổi, bạn có thể xóa đầu ra của ô và in lại bộ đệm.


1
Giao diện ajax đơn giản nhất từng có!
Unni

60
Sử dụng clear_output(wait=True)sẽ thường làm cho kết quả đẹp hơn nếu bạn có clear_outputtrong một vòng lặp.
Toke Faurby

1
một nửa màn hình sau khi kết quả in bị rung, nhưng rung ít hơn nhờ chờ = True
B.Mr.W.

1
Tại sao chúng ta lặp? Có chuyện igì vậy?
jorijnsmit

1
@jorijnsmit, chỉ để minh họa rằng "Xin chào thế giới!" không được in 10 lần, mà chỉ 1 lần. ikhông quan trọng lắm
cel

2

Và trong trường hợp bạn đến đây, giống như tôi đã làm, đang tìm cách làm điều tương tự cho các lô trong một cuốn sổ tay Julia trong Jupyter, sử dụng Plots, bạn có thể sử dụng:

    IJulia.clear_output(true)

vì vậy đối với một loại cốt truyện hoạt hình của nhiều lần chạy

    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

Không có cuộc gọi ClearDefput, tất cả các lô xuất hiện riêng biệt.


2

Bạn có thể sử dụng IPython.display.clearDefput để xóa đầu ra như được đề cập trong câu trả lời của cel. Tôi sẽ nói thêm rằng đối với tôi, giải pháp tốt nhất là sử dụng kết hợp các tham số này để in mà không có bất kỳ sự "lung lay" nào của máy tính xách tay:

from IPython.display import clear_output

for i in range(10):
    clear_output(wait=True)
    print(i, flush=True)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.