Where do stdout and stderr go when curses is active?
import curses, sys
def test_streams():
print "stdout"
print >>sys.stderr, "stderr"
def curses_mode(stdscr):
test_streams()
test_streams()
curses.wrapper(curses_mode)
Actual output is
stdout
stderr
Update0
Expected output is
stdout
stderr
stdout
stderr
entering, and then exiting curses mode with no change to the final text shown in the terminal.
Activating curses saves the terminal text screen’s current contents and clears said screen; exiting curses restores the screen’s contents (tossing away whatever’s been put on screen during the reign of curses itself). Try with this variant of your code and you’ll see better what’s happening:
You’ll note the
wrap stderron the screen for a second (during the sleep) — it’s overwritten the stdout part — then it disappears and you see the four before and after lines on the now-quiescent screen (you can add other sleeps to follow what’s happening in even more details, if you care).