Dove stdout e stderr vanno in modalità maledizioni?
Domanda
Dove stdout e stderr andare quando maledizioni è attivo?
import curses, sys
def test_streams():
print "stdout"
print >>sys.stderr, "stderr"
def curses_mode(stdscr):
test_streams()
test_streams()
curses.wrapper(curses_mode)
uscita effettiva è
stdout
stderr
Update0
risultato atteso è
stdout
stderr
stdout
stderr
ingresso, e quindi di uscire dalla modalità maledizioni senza modificare il testo finale mostrato nel terminale.
Soluzione
Attivazione maledizioni salva contenuti e cancella attuali schermo del terminale di testo detto schermo; All'uscita maledizioni ripristina contenuti dello schermo (gettando via qualunque è stato messo sullo schermo durante il regno di maledizioni stesso). Provate con questa variante del codice e vedrete meglio cosa sta succedendo:
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")
Potrai notare la wrap stderr
sullo schermo per un secondo (durante il sonno) - E 'sovrascritto la parte stdout - poi scompare e si vede il quattro prima e dopo le linee sullo schermo ormai quiescente (è possibile aggiungere altri posti letto a seguire ciò che sta accadendo in anche ulteriori dettagli, se vi interessa).