Куда 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

Update0

Ожидаемый вывод

stdout
stderr
stdout
stderr

ввод и затем выход из режима проклятий без изменения в окончательном тексте, показанном в терминале.

6
задан Matt Joiner 9 February 2010 в 23:27
поделиться

1 ответ

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

5
ответ дан 17 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: