Où stdout et stderr en mode de malédictions?
Question
Où aller faire stdout et stderr quand malédictions est actif?
import curses, sys
def test_streams():
print "stdout"
print >>sys.stderr, "stderr"
def curses_mode(stdscr):
test_streams()
test_streams()
curses.wrapper(curses_mode)
sortie réelle est
stdout
stderr
Update0
Sortie prévue est
stdout
stderr
stdout
stderr
entrée, puis la sortie du mode de malédictions sans modification du texte final figurant dans le terminal.
La solution
Activation malédictions enregistre des contenus actuels de l'écran de terminal texte et efface ledit écran; la sortie de malédictions le contenu restaure l'écran (jeter loin tout ce qui a été mis à l'écran sous le règne de malédictions lui-même). Essayez avec cette variante de votre code et vous verrez mieux ce qui se passe:
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")
Vous remarquerez la wrap stderr
à l'écran pendant une seconde (pendant le sommeil) - il Écrasé la partie stdout - alors il disparaît et vous voyez les quatre avant et après des lignes sur l'écran maintenant quiescent (vous pouvez ajouter d'autres sommeils à suivre, si vous vous souciez ce qui se passe dans encore plus de détails).