Pergunta

Para onde vão o stdout e o stderr quando as maldições estão ativas?

import curses, sys

def test_streams():
    print "stdout"
    print >>sys.stderr, "stderr"

def curses_mode(stdscr):
    test_streams()

test_streams()
curses.wrapper(curses_mode)

Saída real é

stdout
stderr

Atualização0

Saída esperada é

stdout
stderr
stdout
stderr

Inserindo e depois saindo do modo de maldições, sem alteração no texto final mostrado no terminal.

Foi útil?

Solução

A ativação de maldições salva o conteúdo atual da tela de texto do terminal e limpa a tela; A saída de maldições restaura o conteúdo da tela (jogando para fora o que for colocado na tela durante o reinado da própria maldição). Tente com esta variante do seu código e você verá melhor o que está acontecendo:

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")

Você notará o wrap stderr Na tela por um segundo (durante o sono)-ele substitui a parte stdout-então ele desaparece e você vê os quatro antes e depois das linhas na tela agora pra lá (você pode adicionar outros sono para seguir o que está acontecendo até mesmo mais detalhes, se você se importa).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top