Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top