Keylogger程序按下指定按键无法退出,寻求修复方案
按键记录器退出逻辑修复方案
问题根源
你的代码存在几个核心错误:
- 退出判断的for循环在监听器启动前执行,此时
keys是空列表,完全不会触发任何逻辑。 - 用
k == escape做判断是拿单个按键和整个列表比较,永远不会成立。 - 没有在按键回调函数(
on_press)里处理实时按键检测,回调函数才是每次按键触发的入口。 - 第二次尝试的
k.find(escape)用法错误,find是字符串方法,参数必须是单个字符串,且逻辑不符合需求。
修复后的代码
import pynput.keyboard # 定义触发退出的按键字符串 escape_keys = ['Esc', 'Key.esc', 'p', 'Key.shift'] def on_press(key): # 将按键转为字符串格式 key_str = str(key) # 处理普通字符的单引号(比如'p'会被转为"'p'",需要去掉引号) if key_str.startswith("'") and key_str.endswith("'"): key_str = key_str[1:-1] print(key_str) # 检查当前按键是否在退出列表中,是则停止监听 if key_str in escape_keys: return False # 创建并启动监听器 listener = pynput.keyboard.Listener(on_press=on_press) with listener: listener.join()
关键说明
- 实时检测:把退出逻辑移到
on_press回调函数内,每次按键都会触发检查,保证实时性。 - 按键格式处理:普通字符(如
p)会被pynput转为带单引号的字符串('p'),需要去掉引号才能和列表中的值匹配;特殊按键(如Esc)会直接转为Key.esc,可直接匹配。 - 正常退出:当检测到退出按键时,
on_press返回False,监听器会自动停止运行,程序正常退出,无需使用exit()强制终止。
内容的提问来源于stack exchange,提问作者seyduna
相关产品推荐
相关产品推荐

