在pynput.Listener上设置特定的键方法约束,并与python中的字典结合使用

在pynput.Listener上设置特定的键方法约束,并与python中的字典结合使用,python,dictionary,key,listener,pynput,Python,Dictionary,Key,Listener,Pynput,我试图使用if(key==key.left或key==key.up)的限制:只登录log.txt键key.up和key.left。我想添加一个字典,以便Key.up是U,Key.left是L。从那时起,我有一个错误:当我使用keylogger.py时,它在第27行写着文件“keylogger.py”,writeLog keydata=keydata。替换(“,”)UnboundLocalError:赋值之前引用的局部变量“keydata”。当我使用if(key==key.left或key==ke

我试图使用
if(key==key.left或key==key.up)的限制:
只登录log.txt键
key.up
key.left
。我想添加一个字典,以便
Key.up
是U,Key.left是L。从那时起,我有一个错误:当我使用keylogger.py时,它在第27行写着
文件“keylogger.py”,writeLog keydata=keydata。替换(“,”)UnboundLocalError:赋值之前引用的局部变量“keydata”
。当我使用if(key==key.left或key==key.up):时,它不会造成我想要的限制

使用插入的词典进行修改


from pynput.keyboard import Listener, Key


logFile = "/home/diego/log.txt"

def writeLog(key):
    translate_keys = {
        "Key.up": "U",
        "Key.left": "L",
    }
    if(key == Key.left or key == Key.up):

      keydata = str(key)

    keydata = keydata.replace("'", "")

    for key in translate_keys:
        keydata = keydata.replace(key, translate_keys[key])

    with open(logFile, "a") as f:
        f.write(keydata)

with Listener(on_press=writeLog) as l:
    l.join()

如果(key==key.left或key==key.up):与字典
translate\U keys={key.up:“U”,“key.left:”L“,}
,我如何设置限制?

您可以删除引号并直接比较对象,如下所示

def writeLog(key):
    translate_keys = {
        Key.up: "U",
        Key.left: "L",
    }
    if key in translate_keys:
        with open(logFile, "a") as f:
            f.write(translate_keys[key])

您可以删除引号并直接比较对象,如下所示

def writeLog(key):
    translate_keys = {
        Key.up: "U",
        Key.left: "L",
    }
    if key in translate_keys:
        with open(logFile, "a") as f:
            f.write(translate_keys[key])
您可以这样做:

translate\u键={
str(Key.up):“U”,
str(左键):“L”
}
如果(key==key.left或key==key.up):
keydata=translate_keys[str(key)]
#以附加模式打开日志文件
打开(日志文件“a”)作为f:
f、 写入(键数据)
您可以这样做:

translate\u键={
str(Key.up):“U”,
str(左键):“L”
}
如果(key==key.left或key==key.up):
keydata=translate_keys[str(key)]
#以附加模式打开日志文件
打开(日志文件“a”)作为f:
f、 写入(键数据)

你的意思是不用
键。左
你想对照你的字典吗?@aws\u学徒谢谢!我只想注册Key.left和Key.up这两个键,在中解析了多少?。但是现在我不想注册我的log.txt
Key.left
Key.up
我想分别注册
L
U
,因此我正在使用字典。对不起,我不太懂你的意思,你想把
L
U
写入日志文件,而不是你在那里修剪引号和其他东西的所有额外逻辑?@aws\U学徒最初我只想注册
键的按键,只注册
键。up
键。left
键,但我还想转换它们的名称。然后在我的log.txt中
Key.up
将注册为
U
,而'Key.left'将注册为
L
。你的意思是不用
Key.left
你想查字典吗?@aws\U学徒谢谢!我只想注册Key.left和Key.up这两个键,在中解析了多少?。但是现在我不想注册我的log.txt
Key.left
Key.up
我想分别注册
L
U
,因此我正在使用字典。对不起,我不太懂你的意思,你想把
L
U
写入日志文件,而不是你在那里修剪引号和其他东西的所有额外逻辑?@aws\U学徒最初我只想注册
键的按键,只注册
键。up
键。left
键,但我还想转换它们的名称。然后在my log.txt
Key.up
中注册为
U
,而'Key.left'将注册为
L
。您只需比较对象之间的相等性,无需转换为字符串,此外,由于我们正在检查字典中是否存在,因此不需要显式或条件。问题是我不熟悉
Key
对象,因此我说将其转换为
str
,以便它可以散列,谢谢@自动气象站_apprentice@Marcos谢谢你的回答也正确。我将把aws_学徒的答案视为消除了不必要的代码。@DiegoBneiNoah谢谢,他的答案更好。祝你好运。你可以比较对象之间的相等性,不需要转换为字符串,而且因为我们检查字典中的存在,所以不需要显式或条件。问题是我不熟悉
Key
对象,所以我说将其转换为
str
,这样它就可以散列了,谢谢@自动气象站_apprentice@Marcos谢谢你的回答也正确。我将把aws_学徒的答案视为消除了不必要的代码。@DiegoBneiNoah谢谢,他的答案更好。祝你好运