You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

关键说明

  1. 实时检测:把退出逻辑移到on_press回调函数内,每次按键都会触发检查,保证实时性。
  2. 按键格式处理:普通字符(如p)会被pynput转为带单引号的字符串('p'),需要去掉引号才能和列表中的值匹配;特殊按键(如Esc)会直接转为Key.esc,可直接匹配。
  3. 正常退出:当检测到退出按键时,on_press返回False,监听器会自动停止运行,程序正常退出,无需使用exit()强制终止。

内容的提问来源于stack exchange,提问作者seyduna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:10:49