在curses模式下stdout和stderr去哪儿了?

时间:2010-02-09 22:33:13

标签: python ncurses curses

当curses处于活动状态时,stdout和stderr会去哪里?

import curses, sys

def test_streams():
    print "stdout"
    print >>sys.stderr, "stderr"

def curses_mode(stdscr):
    test_streams()

test_streams()
curses.wrapper(curses_mode)

实际输出

stdout
stderr

Update0

预期输出

stdout
stderr
stdout
stderr

进入,然后退出curses模式,不更改终端中显示的最终文本。

1 个答案:

答案 0 :(得分:5)

激活curses保存终端文本屏幕的当前内容并清除所述屏幕;退出curses会恢复屏幕内容(抛弃在curses自身统治期间放在屏幕上的内容)。尝试使用这种代码变体,您会更好地了解正在发生的事情:

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

你会在屏幕上注明wrap stderr一秒钟(在睡眠期间) - 它被覆盖了stdout部分 - 然后它消失了,你会看到现在静止的前后四行屏幕(如果你愿意的话,你可以添加其他睡眠以跟踪更多细节中发生的事情。)