Сценарий Python завершается неудачно при попытке объединения - PullRequest
0 голосов
/ 10 июня 2018

Поэтому я пытаюсь сделать кейлоггер маленьким стартовым проектом, чтобы помочь мне узнать больше о программировании.Я использую pynput для обнаружения ввода с клавиатуры и хочу добавлять символы в переменную с именем line.Скрипт, который я собираюсь показать, работает, когда я помещаю line += str2 вне функции, но не в нее (переменные str были добавлены туда для отладки именно этой вещи.)

Вот код:

import msvcrt, datetime
from pynput.keyboard import Key, Listener

date = str(datetime.date.today())
line = "a"
str1 = "1"
str2 = "2"

#Saves given data to a dated text file.
def saveToFile(data):
    file = open("keylog_{}.txt" .format(date), "a+")
    file.write(str(data))
    file.close()

def on_press(key):
    line += str2
    print(line)

with Listener(on_press=on_press, on_release=None) as listener:
    listener.join()

Заранее спасибо всем, кто может помочь мне выяснить, почему это происходит.

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

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

def on_press(key):
    global line
    line += key
    print(line)
0 голосов
/ 10 июня 2018

Вы ничего не делаете с ключом, который отправляется в вашу функцию on_press.Возможно, вы имели в виду следующее:

def on_press(key):
    global line
    line += key
    print(line)

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

...