Запись действий в python keyboard

У меня есть два списка:

keys = [], delay = []

Нужна функция def record(), которая при нажатии на хоткей (например, Alt + F10), будет запускаться и считывать каждое действие пользователя: Когда он НЕ нажимает клавишу и просто ждёт и когда он НАЖИМАЕТ клавишу, держит её, дальше отпускает.

Список keys должен выглядеть примерно так:

[None, 'W', 'A', 'S', None, 'T']

А список delay так:

[5.08, 3.44, 6.02, 7.95, 0.28, 2.56 ]

Это всё к примеру. То есть эта функция должна записать в список клавиш клавиши, которые пользователь нажмёт во время записи, а в список задержки время, которое понадобится, чтобы зажать клавишу или подождать.

у keyboard есть функция record, play, но они не работают. Подскажите, как реализовать задуманное? Пока код выглядит так

import keyboard


def recording():
    print('recording is started!')
    events = keyboard.record('esc')
    keyboard.play(events)


keyboard.add_hotkey('Ctrl + Alt + 1', recording)
keyboard.wait()

Ответы (1 шт):

Автор решения: Shamus Rezol

В документации сказано, что keyboard.record, как и keyboard.wait, блокирует поток. Если попробовать прервать выполнение вашей программы в момент записи, то в стеке исключений вылезет time.sleep(1e6) (миллион секунд) и последняя строка кода - keyboard.wait().

Если убратьkeyboard.wait() и на его место написать recording(), то функция успешно отрабатывается.

Я не стал слишком заморачиваться и просто запустил вашу функцию recording в параллельном потоке, чтобы keyboard.record блокировал его, а не основной поток, который уже заблокирован keyboard.wait.

# @name 24a434fec8b0433c8a461ff1a86acf7f.py

import keyboard, threading

def _recording():
    print('recording is started!')
    events = keyboard.record('escape')
    keyboard.play(events)
    print('recording is finished!')

def recording():
    threading.Thread(target=_recording, args=tuple()).start()

keyboard.add_hotkey('Ctrl + Alt + 1', recording)
keyboard.wait()
→ Ссылка