私はpythonでcursesプログラムを作成しました。それは正常に動作します。しかし、私がnodelay()
を使用すると、プログラムは何も表示されずに(単に新しいプロンプトで)端末で起動した直後に終了します。nodelay()はpython cursesプログラムを終了させます
このコードは、バグを再現します
EDIT:
sc = curses.initscr() sc.nodelay(1) # But removing this line allows the program to run properly for angry in range(20): sc.addstr(angry, 1, "hi")
ここに私の完全なコード
import curses, time, sys, random def paint(x, y, i): #... def string(s, y): #... def feed(): #... sc = curses.initscr() curses.start_color() curses.curs_set(0) sc.nodelay(1) ######################################### # vars + colors inited for angry in range(20): try: dir = chr(sc.getch()) sc.clear() feed() #lots of ifs body.append([x, y]) body.pop(0) for point in body: paint(*point, i=2) sc.move(height-1, 1) sc.refresh() time.sleep(wait) except Exception as e: print sys.exc_info()[0], e sc.getch() curses.beep() curses.endwin()
がなぜこのhappenningありだし、どのように私はnodelay()
安全に使用することができますか?sc.nodelay()
ラインなしかとあなたの小さなテストプログラムを実行するときに
バグを再現するために必要な最小限のコードを作成してください。たとえば、nodelay()を設定してから、キーをgetch()すると壊れて終了する無限ループに入ることができます。最小のテストケースでバグが消えたら、何が変わったのか把握してください。それが失敗したテストケースを投稿するのに役立たない場合。 – Philip
@Philip良い考えは、そうし、結果を掲載しました。 – ACarter