¿De dónde van stdout y stderr cuando se encuentra en modo de maldiciones?
Pregunta
¿Dónde stdout y stderr ir cuando está activo maldiciones?
import curses, sys
def test_streams():
print "stdout"
print >>sys.stderr, "stderr"
def curses_mode(stdscr):
test_streams()
test_streams()
curses.wrapper(curses_mode)
salida real es
stdout
stderr
Update0
Los resultados esperados es
stdout
stderr
stdout
stderr
entrada y, a continuación salir del modo de maldiciones con ningún cambio en el texto final se muestra en la terminal.
Solución
La activación de maldiciones guarda el contenido y borra actuales de la pantalla de texto terminal de dicha pantalla; salir de maldiciones restaura el contenido de la pantalla (arrojando todo lo que se ha puesto en pantalla durante el gobierno de sí mismo maldiciones). Intenta con esta variante de su código y verá mejor lo que está pasando:
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")
Se habrá dado cuenta el wrap stderr
en la pantalla durante un segundo (durante el sueño) - es sobrescrito la parte stdout - luego desaparece y aparece el antes y después de cuatro líneas en la pantalla, ahora en reposo (se puede añadir otro duerme seguir lo que está sucediendo en muchos más detalles, si le interesa).