python printがcursesの使用後に正しく機能しない
-
01-10-2019 - |
質問
呪いを使った簡単な GUI を作成しました。ただし、curses メニューが終了すると、メイン プログラムが終了するまで、print 関数は画面に何も出力しません。
以下の例では、calc.py を実行すると、foo(calcDirs) の実行後に「Directory list ok」というテキストが画面に出力されます。行をコメントアウトすると folderSelection.menu(dirs)
テキストは通常どおり画面に出力されます。何か案は?Python2.5を使用しています
計算.py:
import folderSelection
[...]
calcDirs=folderSelection.menu(dirs)
print "Directory list ok"
foo(calcDirs)
フォルダー選択.py:
import curses
def menu(folders):
global scr
scr = curses.initscr()
curses.noecho() # Do not echo keypresses
curses.cbreak() # No enter required
scr.keypad(1) # Support keypad
curses.curs_set(0) # Do not show the cursor
# Do some calculations
[...]
exitCurses()
return calcDirs
def exitCurses():
global scr
curses.nocbreak()
curses.curs_set(1)
scr.keypad(0)
curses.echo()
curses.endwin()
編集: テキストはプログラムが終了するまで必然的に遅延するようです。30〜40秒程度遅れる可能性があります。
解決
同様の問題に遭遇しました。Curses は標準出力の出力バッファリングに何かを行っているようです。出力バッファサイズを増やすか、バッファ出力モードを設定していると思います。
バッファ サイズ 0 で stdout を再度開くと、問題が解決される可能性があります。
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
Curses が戻った後、何かを出力する前にそれを試してください。
所属していません StackOverflow