Где 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-затем он исчезает, и вы видите четыре до и после линий на экране сейчас на данный момент (вы можете добавить другие сна, чтобы следить за тем, что происходит даже в Более подробная информация, если вы заботитесь).