簡體   English   中英

使用 Python for Linux 模擬按鍵事件

[英]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 窗口系統),則可以使用已經建議的xsendkeyxsendkeycode 如果它以文本方式運行(在終端窗口中),則pexpect

我推薦PyAutoGui 它使用起來非常簡單,它是跨平台的,並且適用於 Python 3 和 2。

在鏈接頁面中列出了依賴項和一些代碼示例。

由於我在這個和另一個排名良好的 SO 響應中找到的許多解決方案要么被棄用( PyUserInput ),要么使用失敗的evdevUInputError: "/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM