Куда 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
Ожидаемый вывод
stdout
stderr
stdout
stderr
ввод и затем выход из режима проклятий без изменения в окончательном тексте, показанном в терминале.
Активация curses сохраняет текущее содержимое текстового экрана терминала и очищает этот экран; выход из curses восстанавливает содержимое экрана (выбрасывая все, что было выведено на экран во время работы curses). Попробуйте с этим вариантом вашего кода, и вы лучше увидите, что происходит:
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 - затем он исчезает, и вы видите четыре строки до и после на теперь уже спокойном экране (вы можете добавить другие сны, чтобы проследить происходящее более детально, если вам интересно).