6

当 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

更新0

预期输出为

stdout
stderr
stdout
stderr

进入,然后退出诅咒模式,终端中显示的最终文本没有改变。

4

1 回答 1

5

激活 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屏幕上的一秒钟(在睡眠期间)——它被覆盖了标准输出部分——然后它消失了,你在现在静止的屏幕上看到前后四行(你可以添加其他睡眠到如果您在乎,请更详细地了解正在发生的事情)。

于 2010-02-10T04:26:35.753 回答