14

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

谢谢!

4

6 回答 6

15

看看这个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)
于 2013-10-18T19:27:00.177 回答
8

一种更底层的方法是创建一个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()
于 2012-08-09T13:47:03.820 回答
7

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

于 2010-04-04T22:31:39.357 回答
2

我推荐PyAutoGui。它使用起来非常简单,它是跨平台的,适用于 Python 3 和 2。

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

于 2015-10-06T07:42:06.030 回答
1

http://people.csail.mit.edu/adonovan/hacks/xsendkey.html

于 2010-04-04T19:07:01.630 回答
0

由于我在这个和另一个排名靠前的 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')

它就像一个魅力!

于 2020-10-06T21:49:03.020 回答