코드에서 ipython notebook clear cell 출력


132

iPython 노트북에는 직렬 포트와 print수신 된 데이터를 실시간으로 수신 하는 while 루프가 있습니다.

가장 최근에 수신 한 데이터 만 표시하기 위해 달성하고자하는 것 (예 : 가장 최근의 데이터를 표시하는 한 줄만. 셀 출력 영역에는 스크롤 없음)

내가 생각하는 것은 새 데이터를 수신 할 때 이전 셀 출력을 지우고 새 데이터를 인쇄하는 것입니다. 프로그래밍 방식으로 오래된 데이터를 지우는 방법이 궁금합니다.

답변:


265

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
가장 간단한 아약스 인터페이스!
Unni

60
루프를 사용하는 clear_output(wait=True)경우 일반적으로를 사용하면 결과가 더 좋아집니다 clear_output.
Toke Faurby

1
인쇄 결과 후 화면의 절반이 흔들리지 만 wait = True
B.Mr.W.

1
왜 우리는 루핑? 무엇입니까 i?
jorijnsmit

1
@jorijnsmit, "Hello World!" 10 회가 아니라 1 회만 인쇄됩니다. i실제로 중요하지 않습니다.
cel

2

그리고 내가 당신이 여기 온 것처럼 Jupyter의 Julia 노트북에서 줄거리를 위해 플롯을 사용하여 같은 일을하려고한다면 다음을 사용할 수 있습니다.

    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 을 사용하여 셀의 답변에 언급 된대로 출력을 지울 수 있습니다 . 나에게 가장 좋은 해결책은이 매개 변수 조합을 사용하여 노트북의 "shakiness"없이 인쇄하는 것이 었습니다.

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.