Napisałem program curses w python. Działa dobrze. Jednakże, kiedy używam nodelay()
, program wychodzi od razu po uruchomieniu w terminalu, z niczym nie pokazanym (tylko nowym monitem).nodelay() powoduje, że program Python Curses opuścił
EDIT
Kod ten będzie odtworzyć błąd:
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")
Oto mój pełny kod
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()
Dlaczego to happenning i jak mogę użyć nodelay()
bezpiecznie?
Spróbuj sparować swój kod do minimum niezbędnego do odtworzenia błędu. Na przykład można ustawić nodelay(), a następnie przejść do nieskończonej pętli, która łamie i kończy się, gdy getch() klucz. Jeśli błąd zniknie w minimalnym przypadku testowym, wymyśl, co się zmieniło. Jeśli to nie pomoże opublikować wadliwy test. – Philip
@Philip dobre myślenie, zrobiłem to i opublikowałem wyniki. – ACarter