OSError: [Errno 19] 无法打开 uinput 设备:没有这样的设备

Posted

技术标签:

【中文标题】OSError: [Errno 19] 无法打开 uinput 设备:没有这样的设备【英文标题】:OSError: [Errno 19] Failed to open the uinput device: No such device 【发布时间】:2018-07-16 09:26:16 【问题描述】:

我对 raspberry 和 Linux 还是很陌生。我正在尝试使用以下代码在 Raspbian(r Pi 3 B)上运行 python 库 uinput 的基本示例:

import uinput

device = uinput.Device([
        uinput.BTN_LEFT,
        uinput.BTN_RIGHT,
        uinput.REL_X,
        uinput.REL_Y,
        ])

for i in range(20):
    device.emit(uinput.REL_X, 5)
    device.emit(uinput.REL_Y, 5)

我得到错误:

Traceback(最近一次调用最后一次):

文件“/home/pi/Desktop/t1.py”,第 7 行,在 uinput.REL_Y, init 中的文件“/home/pi/.local/lib/python3.5/site-packages/uinput/init.py”,第 178 行 self.uinput_fd = fd 或 fdopen() fdopen 中的文件“/home/pi/.local/lib/python3.5/site-packages/uinput/__init.py”,第 84 行 返回 _libsuinput.suinput_open() _open_error_handler 中的文件“/home/pi/.local/lib/python3.5/site-packages/uinput/init.py”,第 70 行 引发 OSError(code, msg)

怎么了?我需要更改什么以及在哪里更改?

【问题讨论】:

你能发布完整的回溯吗? 你不应该open设备吗?我的意思是with Device as device 【参考方案1】:

uinput 驱动模块加载了吗?

试试:

$ lsmod | grep uinput

可能不会显示任何内容,这意味着未加载驱动程序。尝试加载它:

$ modprobe uinput

然后试试你的 Python 代码。如果你没有以 root 权限运行你的代码,那么你可能会得到一个PermissionError,因为/dev/uinput 设备文件的访问权限。

【讨论】:

你是对的,你的第一个命令什么也没打印。我必须使用 sudo 和 python 代码运行的第二个命令然后给出了你所说的错误。 然后它开始抛出“ImportError: No module named 'uinput'”。 如果我在没有 sudo 的情况下运行脚本并且在导入后立即插入行 print(uinput) 它会打印 <module 'uinput' from '/home/pi/.local/lib/python3.5/site-packages/uinput/__init__.py'> 我猜这是正确的 您使用的是虚拟环境吗?我对uinput 不是很熟悉,所以我可能是错的,但由于它涉及设备驱动程序,我希望它只能由特权用户使用。 所以我使用 pip3 添加它并设法运行该示例代码(必须 import time 库并添加到循环行 time.sleep(0.5) 以查看发生的任何事情,但这已经是另一回事了)。非常感谢您的快速帮助!

以上是关于OSError: [Errno 19] 无法打开 uinput 设备:没有这样的设备的主要内容,如果未能解决你的问题,请参考以下文章

OSError:[Errno 24]使用Nibabel打开的文件过多

Gunicorn 因 OSError 失败:[Errno 107] 传输端点未连接

socketserver OSError:[Errno 98] Address already in use

当我使用pycharm运行代码时,错误“OSError:[Errno 49]无法分配请求的地址”。

Python创建文件报错OSError:[Errno 22] Invalid argument处理

python使用open的OSError: [Errno 22] Invalid argument错误