Mat*_*ner 6 python curses ncurses
当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)
Run Code Online (Sandbox Code Playgroud)
实际输出是
stdout
stderr
Run Code Online (Sandbox Code Playgroud)
预期的产出是
stdout
stderr
stdout
stderr
Run Code Online (Sandbox Code Playgroud)
进入,然后退出curses模式,不更改终端中显示的最终文本.
激活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")
Run Code Online (Sandbox Code Playgroud)
你会wrap stderr在屏幕上注意一秒钟(在睡眠期间) - 它被覆盖了stdout部分 - 然后它消失了,你会在现在静止的屏幕上看到前后四行(你可以添加其他睡眠到如果您愿意,请关注更多细节中发生的事情.