[英]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.