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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top