我正在编写一个脚本来自动运行特定模型。当模型失败时,它等待用户输入(Enter键)。我可以检测到模型何时失败,但我无法使用python(在linux上)来模拟按键事件。 Windows有SendKeys库来执行此操作,但我想知道在Linux上是否有类似的python库。
谢谢!
答案 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')
它就像一种魅力!