在curses模式下stdout和stderr去哪了?
当使用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
进入curses模式,然后退出时,终端中显示的最终文本没有变化。
1 个回答
7
激活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
,持续一秒钟(在休眠期间)——它覆盖了标准输出的部分——然后它消失了,你会看到屏幕上之前和之后的四行内容(如果你想更详细地跟踪发生了什么,可以添加其他的休眠时间)。