问题
How can I simulate a keystroke in python? I also want to press multiple keys simultaneously.
Something like:
keystroke('CTRL+F4')
or
keystroke('Shift+A')
回答1:
Although it's specific to X, you can install the xautomation package (apt-get install xautomation
on Debian-based systems) and use xte
to simulate keypresses, e.g.:
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)
回答2:
python-uinput:
Pythonic API to Linux uinput kernel module...
Python-uinput is Python interface to Linux uinput kernel module which allows attaching userspace device drivers into kernel. In practice, Python-uinput makes it dead simple to create virtual joysticks, keyboards and mice for generating arbitrary input events programmatically...
回答3:
Consider python-uinput and evdev. Example of shift+a
with the latter:
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()
回答4:
If you plan to use it on Linux, try pyautogui library. For multiple keys you will need to use hotkey, e.g.:
pyautogui.hotkey('ctrl', 'c') # ctrl-c to copy
For me it worked - see here: How to pass a keystroke (ALT+TAB) using Popen.communicate (on Linux)?
回答5:
If you are on Windows, use Sendkeys and if on Linux, try out the suggestion given here for xsendkeys or pexpect.
来源:https://stackoverflow.com/questions/5714072/simulate-keystroke-in-linux-with-python