Symulowanie naciśnięcia klawisza w Linuksie za pomocą Pythona

Jak mogę symulować naciśnięcie klawisza w Pythonie? Chcę również nacisnąć kilka klawiszy jednocześnie.

Coś w stylu:

keystroke('CTRL+F4')

Lub

keystroke('Shift+A')
Author: James Vickery, 2011-04-19

5 answers

Chociaż jest specyficzny dla X, możesz zainstalować pakiet xautomation (apt-get install xautomation na systemach opartych na Debianie) i używać xte do symulacji naciśnięć klawiszy, np.:

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)
 13
Author: Mark Longair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-19 09:29:30

Python-uinput :

API Pythonic do modułu jądra Linux uinput...

Python-uinput jest interfejsem Pythona do Linux uinput kernel module, który pozwala na podłączenie sterowników urządzeń przestrzeni użytkownika do jądra. W praktyce Python - uinput ułatwia tworzenie wirtualnych joysticków, klawiatur i myszy do programowego generowania dowolnych zdarzeń wejściowych...

 14
Author: Ignacio Vazquez-Abrams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-06 22:35:25

Rozważmy python-uinput i evdev . Przykład shift+a z tym ostatnim:

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()
 10
Author: gvalkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-06 21:09:43

Jeśli planujesz używać go w Linuksie, spróbuj pyautogui library. Dla wielu klawiszy będziesz musiał użyć skrótu klawiszowego, np.:

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

Dla mnie zadziałało-zobacz tutaj: Jak przekazać naciśnięcie klawisza (ALT + TAB) za pomocą Popen.komunikować się (na Linuksie)?

 2
Author: mrjoseph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-26 14:40:20

Jeśli używasz Windows, użyj Sendkeys , a jeśli używasz Linuksa, wypróbuj sugestię podaną tutaj dla xsendkeys lub pexpect.

 1
Author: Senthil Kumaran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:33