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