此问题在这里已经有答案:
ImportError:无法导入名称X(13个答案)
13天前关闭。
我从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()
我是否缺少使程序正确将击键存储到文本文件中的内容?
问题来源:stackoverflow
第1个,不要将您的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
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。