Wohin gehen Stdout und Stderr, wenn im Flüchenmodus?
Frage
Wohin gehen Stdout und Stderr, wenn Flüche aktiv sind?
import curses, sys
def test_streams():
print "stdout"
print >>sys.stderr, "stderr"
def curses_mode(stdscr):
test_streams()
test_streams()
curses.wrapper(curses_mode)
Die tatsächliche Ausgabe ist
stdout
stderr
Update0
Erwartete Ausgabe ist
stdout
stderr
stdout
stderr
Eingeben und dann den Flüchenmodus ohne Änderung des endgültigen Textes, der im Terminal angezeigt wird.
Lösung
Das Aktivieren von Flüchen speichert den aktuellen Inhalt des Terminaltextbildschirms und löscht den Bildschirm. Das Verlassen von Flüchen stellt den Inhalt des Bildschirms wieder her (wirft alles, was während der Regierungszeit der Flüche selbst auf den Bildschirm gebracht wurde). Versuchen Sie es mit dieser Variante Ihres Codes und Sie werden besser sehen, was passiert:
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")
Sie werden die bemerken wrap stderr
Für eine Sekunde auf dem Bildschirm (während des Schlafes)-es hat den Stdout-Teil überschrieben-, dann verschwindet es und Sie sehen die vier vor und nach den Zeilen auf dem jetzt quievierten Bildschirm (Sie können andere Schlafe hinzufügen, um dem zu folgen, was in gleichermaßen passiert Weitere Details, wenn Sie sich interessieren).