制作键盘记录器(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
相关产品推荐
相关产品推荐

