cursesモードの場合、stdoutとstderrはどこに行きますか?
質問
呪いがアクティブなとき、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
ターミナルに表示されている最終テキストを変更せずに、入力してから呪いモードを終了します。
解決
呪いをアクティブにすると、ターミナルテキスト画面の現在の内容が保存され、その画面がクリアされます。呪いを終えると、画面の内容が復元されます(呪い自体の治世中に画面に置かれたものはすべて捨てます)。コードのこのバリアントを試してみると、何が起こっているのかがわかります。
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部分に上書きされます - それは消え、あなたは今のQuisent画面に4つの行が表示されます(あなたは他の睡眠を追加して、偶数で起こっていることに従うことができます詳細は、気にしない場合)。
所属していません StackOverflow