저주 모드에서 stdout과 stderr는 어디로 갈까요?
문제
저주가 활성화 될 때 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 개의 전후 줄을 볼 수 있습니다 (다른 수면을 추가하여 심지어 일어나는 일을 따라갈 수 있습니다. 더 자세한 내용, 당신이 관리하는 경우).
제휴하지 않습니다 StackOverflow