На терминалах Posix вы должны перенастроить stdin, чтобы он был неблокирующим, и вернуть его обратно. Это можно сделать автономно, но, возможно, вам лучше использовать для этого стороннюю библиотеку.
Terminedia (ветвь разработки) выполняет реконфигурацию и имеет функцию getch
, которая будет возвращать первое нажатие - его можно легко адаптировать для всех кепрессов на интервале: https://github.com/jsbueno/terminedia/blob/d97976fb11ac54b527db4183497730883ba71515/terminedia/input.py#L116
Итак, адаптируя это getch
, вы можете использовать:
from terminedia import keyboard, inkey
import time
def collect_keys(timeout=0.1) -> str:
"""Returns all keys pressed in given time interval
"""
step = 1 / 30
ellapsed = step
with keyboard():
time.sleep(step)
key = inkey()
while True:
key = inkey()
time.sleep(step)
ellapsed += step
if ellapsed >= timeout:
break
return key
Вы можете установить версию для разработки с помощью pip install git+https://github.com/jsbueno/terminedia.git
- необходимые «inkey» и «клавиатура» будут доступны по умолчанию, когда будет завершен выпуск 0.3 проекта.
заявление об отказе : I я являюсь автором пакета terminedia
. Хотя были намеки, извините, что не разъяснил с самого начала.
(также этот код должен работать и на Windows)