Para onde vão o stdout e o stderr quando no modo de maldição?
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.
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).