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

制作键盘记录器(KeyLogger)时程序启动即关闭的解决方法咨询

解决键盘记录器启动后立即关闭的问题

嘿,我来帮你排查这个问题!你遇到的程序秒关情况,根本不需要用Time.sleep()来解决——核心问题是代码里的一个小错误导致程序崩溃,而且你可能没意识到listener.join()本身就会让程序保持运行状态。

先看你代码里的致命小问题:

print("[0] pressed".format(key))

这行的格式字符串写错了![0]是索引占位符,但你只传入了一个参数key,运行时只要按下任何键,就会触发IndexError异常,直接导致程序崩溃退出,所以看起来一启动就关了。

另外,listener.join()方法本身就会阻塞主线程,让程序一直运行,直到监听器主动停止(比如你按下esc键),完全不需要靠Time.sleep()来维持运行。

给你修正后的完整代码:

import pynput
from pynput.keyboard import Key, Listener

# 初始化你需要的全局变量(如果要记录按键的话)
keys = []
count = 0

def on_press(key):
    global keys, count
    # 修正格式字符串,用{}正确占位
    print("[{}] pressed".format(key))
    # 可选:把按键存入列表,方便后续导出或处理
    keys.append(str(key))
    count += 1

def on_release(key):
    # 按下esc键时停止监听器,程序会正常退出
    if key == Key.esc:
        return False

# 启动监听器,join()会阻塞直到监听器终止
with Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

关键说明:

  • 修正后的print语句能正确输出按键信息,不会触发异常,程序自然就不会崩溃了。
  • listener.join()会让主线程等待监听器线程结束,所以程序会一直保持运行状态,直到你按下esc键触发on_release返回False,监听器停止后程序才会正常退出。
  • 如果你需要让程序在后台静默运行(比如Windows托盘、Linux后台进程),那是额外的需求,但基础的“保持运行直到主动关闭”,上面的代码完全可以满足。

最后提醒一句:键盘记录器涉及隐私,一定要在合法合规的场景下使用(比如自己的设备、获得明确授权)哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:17:28