Wejście niebuforowane dla Pythona na komputerze z systemem Windows
Co próbuję zrobić
Próbuję zaprojektować stoper z czasem okrążenia. Gdy naciśniesz „L”, okrążenie jest zakończone i gdy naciśniesz „S”, wszystkie okrążenia są zakończone, a czasy są wyświetlane w kolejności.
Będąc w C ++, mogę to zrobić za pomocą funkcji _getch () z conio.h i byłoby to całkiem łatwe. Chcę napisać ten program w Pythonie, ponieważ byłoby to dużo łatwiejsze, a obsługa czasu w C ++ okazała się trudna.
Nadal napisałem program (dla synchronizacji kostki) na tym linku:Zegar kostki
Problem
Nie ma takiej funkcji jak _getch (). Jest to problem, ponieważ na końcu okrążenia nie można nacisnąć klawisza i klawisza Enter, ponieważ byłoby to czasochłonne i irytujące dla użytkownika.
rzeczy, które czytam
Czytałem o bibliotece curses, ale nie ma ona żadnego portu Windows.
Wypróbowałem program, który miał działać zgodnie ze stroną internetową. To było z linku
Ale to nie zadziałało.
Co próbowałem:
msvcrt.getch()
>>> import msvcrt >>> msvcrt.getch() '\xff'
Uważam, że FF jest szesnastkowym odpowiednikiem 255.
Nie rozumiałem, dlaczego tak się dzieje.
readch()
jak sugggested in @martineau
importuj msvcrt
def readch (echo = True): „Uzyskaj pojedynczy znak w systemie Windows”. while msvcrt.kbhit (): # usuń bufor klawiatury msvcrt.getch () ch = msvcrt.getch () podczas ch w '0000e0 ': # strzałka lub prefiks klawisza funkcyjnego? msvcrt.getch () ch = msvcrt.getch () # drugie wywołanie zwraca rzeczywisty kod klucza, jeśli echo: msvcrt.putch (ch) return ch.decode ()
a = []
dla i w zakresie (10): a.append (readch ())
Błąd, który otrzymałem:
>>>
Traceback (most recent call last):
File "C:/Python25/1.py", line 30, in <module>
a.append(readch())
File "C:/Python25/1.py", line 25, in readch
return ch.decode()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)
Czego potrzebuję pomocy
Funkcja działająca jak _getch () lub coś podobnego, która działa na komputerze z systemem Windows.
Specyfikacja maszyny
Python IDLE 2.5.4 lub 2.6 lub 2.7
Windows XP SP3