import curses, threading, sys
def thread():
a = curses.initscr()
curses.noecho()
curses.cbreak()
a.keypad(True)
while True:
char = a.getch()
if char == curses.KEY_RESIZE:
print("key_resize", file=sys.stderr)
else:
print("other", file=sys.stderr)
threading.Thread(target=thread).start()
この関数を単独で実行すると、すべて問題なく動作します - KEY_RESIZE が送信され、すべて問題ありません。スレッド内から getch() を呼び出すと問題が発生します。キー イベントは正常に動作しているように見えますが (徹底的にまたは広範囲にテストしていません)、KEY_RESIZE が送信されることはありません。
私は何か間違ったことをしていますか、またはスレッドに関係なく KEY_RESIZE が送信されるようにこれを修正する方法はありますか?
Python 3.4.3 の 2 つの異なる端末エミュレーター (gnome-terminal と konsole) で、スレッドの内側と外側の両方で画面を初期化して試しました。
curses は画面出力を台無しにする傾向があるため、print は stderr (別の端末にリダイレクトされます) に送信されます。このコードでは端末の修正も扱っていないため、通常の状態に戻すには端末をリセットする必要があります。