문제

저주가 활성화 될 때 stdout과 stderr는 어디로 갈까요?

import curses, sys

def test_streams():
    print "stdout"
    print >>sys.stderr, "stderr"

def curses_mode(stdscr):
    test_streams()

test_streams()
curses.wrapper(curses_mode)

실제 출력입니다

stdout
stderr

업데이트 0

예상 출력입니다

stdout
stderr
stdout
stderr

터미널에 표시된 최종 텍스트를 변경하지 않고 저주 모드를 입력 한 다음 출발합니다.

도움이 되었습니까?

해결책

저주를 활성화하면 터미널 텍스트 화면의 현재 내용을 저장하고 다음 화면이 제거됩니다. 저주가 나가면 화면의 내용이 복원됩니다 (저주 자체의 통치 기간 동안 화면에 놓인 것을 버리십시오). 이 코드 변형을 시도하면 무슨 일이 일어나고 있는지 더 잘 알 수 있습니다.

import curses, sys, time

def test_streams(wot):
    print wot, "stdout"
    print >>sys.stderr, wot, "stderr"

def curses_mode(stdscr):
    test_streams("wrap")
    time.sleep(1.0)

test_streams("before")
curses.wrapper(curses_mode)
test_streams("after")

당신은 주목할 것입니다 wrap stderr 화면에서 잠깐 동안 (수면 중에)-stdout 부품을 덮어 쓴 다음 사라지고 지금은 4 개의 화면에서 4 개의 전후 줄을 볼 수 있습니다 (다른 수면을 추가하여 심지어 일어나는 일을 따라갈 수 있습니다. 더 자세한 내용, 당신이 관리하는 경우).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top