質問

呪いがアクティブなとき、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つの行が表示されます(あなたは他の睡眠を追加して、偶数で起こっていることに従うことができます詳細は、気にしない場合)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top