Поймать нажатие клавиатуры не надежно / Python
Предпосылкой является разработка программы, которая работает в бесконечном цикле, для чтения живых данных откуда-то. Я хочу, чтобы эта программа управлялась взаимодействием через клавиатуру (без 'Enter'). Для этого мне попался следующий фрагмент.
import msvcrt
def keypress():
try:
if msvcrt.kbhit(): #Keyboard hit?
key = msvcrt.getch().decode("utf-8").lower()
return key
except UnicodeDecodeError:
pass
while not False:
print('rainy rainy rain rain')
if keypress() == "e": #e: exit
exit()
if keypress() == "w": # w: wait
waiting = True
while waiting == True:
print("waiting waiting waiting")
if keypress() == "w":
waiting = False
Я знаю, что это легкомысленно называть новый бесконечный цикл просто для ожидания, но сумасшедшая вещь - удар по "е", кажется, чаще успешен, чем удар по "ш". Но в каждом случае несколько хитов вообще не регистрируются вовсе. -> Есть ли способ решить эту проблему? Windows также может поймать каждый удар по клавиатуре!
1 ответ
while not False:
print('rainy rainy rain rain')
key = keypress()
if key == "e": #e: exit
exit()
if key == "w": # w: wait
waiting = True
while waiting == True:
print("waiting waiting waiting")
if keypress() == "w":
waiting = False
... это небольшое изменение, решило проблему. Я думаю, что вызов keypress() [и, следовательно, также функции msvcrt.getch()] занимает "много" времени, что препятствует распознаванию другого нажатия клавиатуры. Но почему? Не должен ли удар по ключу быть забуференным!? И поэтому прошедшее время не должно иметь значения!?