0

所以我正在尝试制作一个键盘记录器作为一个小的入门项目,以帮助我了解更多关于编程的知识。我正在使用 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()

提前感谢任何可以帮助我弄清楚为什么会发生这种情况的人。

4

2 回答 2

3

这与变量范围有关。 line在您的on_press方法中与line上面的变量不同。如果你想做这样的事情,你需要告诉它使用全局范围变量:

def on_press(key):
    global line
    line += key
    print(line)
于 2018-06-09T23:19:12.553 回答
2

你没有对发送到你的 on_press 函数的键做任何事情。你是不是这个意思:

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

在您的示例中,行也将被取消分配,要进行全局操作,您必须使用关键字 global 或为状态保留创建一个类/闭包。

于 2018-06-09T23:17:45.683 回答