开发者社区> 问答> 正文

将击键存储到文本文件中

此问题在这里已经有答案

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

展开
收起
is大龙 2020-03-24 21:33:38 570 0
1 条回答
写回答
取消 提交回答
  • 第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

    2020-03-24 21:33:46
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载