python-3.x - 如何将我的无线键盘作为标准输入分配给 python3 脚本?
问题描述
我有一个连接到树莓派的无线键盘。现在,当我启动 Pi 时,键盘将在登录提示符处“挂起”。
整个设置是无头的,我想将键盘分配给通过 SystemD 同时运行的 python3 脚本。
流位于:
/dev/input/event0
正如我所说,如果脚本完全劫持了键盘,那很好。
更新
我的另一个选择是在启动时简单地启动我的程序,而不是默认的 shell 提示符。这将确保它具有键盘的“焦点”。
解决方案
好的,我找到了一个非常简单的答案:因为你的系统上已经安装了 python-evdev,你可以在你的 python3 程序中使用这个模块来实现你想要的。添加import evdev
到 python3 程序的顶部。然后,您必须在程序中使用as 参数(键盘的路径)创建evdev.device.InputDevice
第一件事。"/dev/input/event0"
然后,调用evdev.device.InputDevice.grab
,它应该完成!我没有你的程序的代码,但我写了一个小示例程序:
import evdev, sys
if __name__ == "__main__":
dev = evdev.device.InputDevice("/dev/input/event0")
try:
dev.grab()
except IOError:
print("error : /dev/input/event0 has already been grabbed")
sys.exit(1)
else:
count = 0
while count <= 100:
instr = input("Enter something : ")
print("You entered : " + instr)
count += 1
try:
dev.ungrab() # important : free your keyboard when the script exits !
except IOError:
print("error : /dev/input/event0 has already been released")
sys.exit(1)
编辑:
我发现上面的示例程序不会自动捕获击键并为您提供文本。您必须手动执行此操作,可以在此处找到示例
推荐阅读
- java - 休眠搜索,过滤高于其他过滤器
- angular - Google analytics - Avg page load for Angular 5
- redis - 带有 Redis 数据的样本的 JMeter 顺序
- .net - 域外用户访问的公司应用是否需要开启ADFS?
- css - 如何在 Bootstrap NgbTypeahead 中使用向上和向下箭头键滚动
- sql - 更新受组影响的所有行
- bash - 在 bash 中定义一个函数并将其传递给 .run 脚本
- python - 在熊猫中的列元素旁边添加数值
- javascript - 删除部分 img src
- visual-studio-code - 如何在 Visual Studio 代码中同时查看终端、调试控制台和输出屏幕?