使用Python for Linux模拟按键事件

时间:2010-04-04 18:57:50

标签: python linux key keypress simulate

我正在编写一个脚本来自动运行特定模型。当模型失败时,它等待用户输入(Enter键)。我可以检测到模型何时失败,但我无法使用python(在linux上)来模拟按键事件。 Windows有SendKeys库来执行此操作,但我想知道在Linux上是否有类似的python库。

谢谢!

6 个答案:

答案 0 :(得分:13)

看看这个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)

答案 1 :(得分:7)

如果“模型”以图形方式运行(使用X窗口系统),则已建议的xsendkey是可能的,或xsendkeycode。如果它以文本方式运行(在终端窗口中),则pexpect

答案 2 :(得分:5)

更低级的方法是创建一个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()

答案 3 :(得分:1)

答案 4 :(得分:1)

我建议PyAutoGui。它的使用非常简单,它是跨平台的,适用于Python 3和2。

在链接页面中列出了依赖关系和一些代码示例。

答案 5 :(得分:0)

我在本文档和另一本well ranked SO response中找到的许多解决方案已被弃用(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')

它就像一种魅力!