Имитация нажатия клавиш в Linux с помощью Python - PullRequest
15 голосов
/ 19 апреля 2011

Как я могу симулировать нажатие клавиш в python? Я также хочу нажать несколько клавиш одновременно.

Что-то вроде:

keystroke('CTRL+F4')

или

keystroke('Shift+A')

Ответы [ 5 ]

15 голосов
/ 19 апреля 2011

python-uinput :

Python-модуль API для Linux uinput ...

Python-uinput - это интерфейс Python для модуля ядра Linux uinput, которыйпозволяет подключать драйверы пользовательских устройств в ядро.На практике Python-uinput упрощает создание виртуальных джойстиков, клавиатур и мышей для программной генерации произвольных событий ввода ...

13 голосов
/ 19 апреля 2011

Хотя он специфичен для X, вы можете установить пакет xautomation (apt-get install xautomation в системах на основе Debian) и использовать xte для имитации нажатий клавиш, например:

from subprocess import Popen, PIPE

control_f4_sequence = '''keydown Control_L
key F4
keyup Control_L
'''

shift_a_sequence = '''keydown Shift_L
key A
keyup Shift_L
'''

def keypress(sequence):
    p = Popen(['xte'], stdin=PIPE)
    p.communicate(input=sequence)

keypress(shift_a_sequence)
keypress(control_f4_sequence)
12 голосов
/ 23 августа 2012

Рассмотрим python-uinput и evdev . Пример shift+a с последним:

from evdev import uinput, ecodes as e

with uinput.UInput() as ui:
    ui.write(e.EV_KEY, e.KEY_LEFTSHIFT, 1)
    ui.write(e.EV_KEY, e.KEY_A, 1)
    ui.syn()
2 голосов
/ 26 января 2018

Если вы планируете использовать его в Linux, попробуйте библиотеку pyautogui .Для нескольких клавиш вам необходимо использовать горячую клавишу, например:

pyautogui.hotkey('ctrl', 'c')  # ctrl-c to copy

Для меня это сработало - см. Здесь: Как передать нажатие клавиши (ALT + TAB) с помощью Popen.communicate (в Linux)

1 голос
/ 19 апреля 2011

Если вы работаете в Windows, используйте Sendkeys , а если в Linux, попробуйте предложение , данное здесь для xsendkeys или pexpect.

...