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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top