[英]Simulating Key Press event using Python for Linux
我正在编写一个脚本来自动运行特定模型。 当模型失败时,它会等待用户输入(Enter 键)。 我可以检测到模型何时失败,但我无法使用 python(在 linux 上)来模拟按键事件。 Windows 有 SendKeys 库来做到这一点,但我想知道在 linux 上是否有类似的 python 库。
谢谢!
看看这个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)
一种更底层的方法是创建一个uinput
设备,然后您可以从中将输入事件注入 linux 输入子系统。 考虑以下库:
使用后者发送<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()
如果“模型”以图形方式运行(使用 X 窗口系统),则可以使用已经建议的xsendkey或xsendkeycode 。 如果它以文本方式运行(在终端窗口中),则pexpect 。
我推荐PyAutoGui 。 它使用起来非常简单,它是跨平台的,并且适用于 Python 3 和 2。
在链接页面中列出了依赖项和一些代码示例。
由于我在这个和另一个排名良好的 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')
它就像一个魅力!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.