使用 Python for Linux 模拟按键事件
- 2024-10-30 08:35:00
- admin 原创
- 45
问题描述:
我正在编写一个脚本来自动运行特定模型。当模型失败时,它会等待用户输入(Enter 键)。我可以检测到模型何时失败,但我无法使用 python(在 linux 上)来模拟按键事件。Windows 有 SendKeys 库可以执行此操作,但我想知道 linux 上是否有类似的 python 库。
谢谢!
解决方案 1:
看看这个https://github.com/SavinaRoja/PyUserInput
它在 python 中对鼠标和键盘的跨平台控制
键盘控制适用于 X11(linux) 和 Windows 系统。但不支持 mac(当我写这个答案时)。
from pykeyboard import PyKeyboard
k = PyKeyboard()
# To Create an Alt+Tab combo
k.press_key(k.alt_key)
k.tap_key(k.tab_key)
k.release_key(k.alt_key)
解决方案 2:
一个更低级的方法是创建一个uinput
设备,然后从该设备将输入事件注入 Linux 输入子系统。考虑以下库:
python-uinput
埃夫德夫
<enter>
使用后者发送的示例:
from evdev import uinput, ecodes as e
with uinput.UInput() as ui:
ui.write(e.EV_KEY, e.KEY_ENTER, 1)
ui.write(e.EV_KEY, e.KEY_ENTER, 0)
ui.syn()
解决方案 3:
如果“模型”以图形方式运行(使用 X 窗口系统),则可以使用已建议的xsendkey或xsendkeycode。如果它以文本方式运行(在终端窗口中),则使用pexpect。
解决方案 4:
我推荐PyAutoGui。它使用起来非常简单,它是跨平台的,适用于 Python 3 和 2。
链接页面列出了依赖项和一些代码示例。
解决方案 5:
http://people.csail.mit.edu/adonovan/hacks/xsendkey.html
解决方案 6:
由于我在此以及另一个排名靠前的 SO 响应中找到的许多解决方案要么已被弃用(PyUserInput),要么使用evdev,这失败了(UInputError: "/dev/uinput" cannot be opened for writing
),对于我来说,使用 Linux 的最简单的解决方案是pynput。 一个直接来自其文档的示例:
from pynput.keyboard import Key, Controller
keyboard = Controller()
# Press and release space
keyboard.press(Key.space)
keyboard.release(Key.space)
# Type a lower case A; this will work even if no key on the
# physical keyboard is labelled 'A'
keyboard.press('a')
keyboard.release('a')
# Type two upper case As
keyboard.press('A')
keyboard.release('A')
with keyboard.pressed(Key.shift):
keyboard.press('a')
keyboard.release('a')
# Type 'Hello World' using the shortcut type method
keyboard.type('Hello World')
效果非常好!
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件