19

如何在 python 中模拟击键?我也想同时按下多个键。

就像是:

keystroke('CTRL+F4')

或者

keystroke('Shift+A')
4

6 回答 6

19

考虑python-uinputevdevshift+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()
于 2012-08-23T17:05:38.097 回答
16

蟒蛇输入

Pythonic API 到 Linux uinput 内核模块...

Python-uinput 是 Linux uinput 内核模块的 Python 接口,它允许将用户空间设备驱动程序附加到内核中。在实践中,Python-uinput 让创建虚拟操纵杆、键盘和鼠标以编程方式生成任意输入事件变得非常简单......

于 2011-04-19T09:12:59.003 回答
15

虽然它特定于 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)
于 2011-04-19T09:29:30.097 回答
4

如果您打算在 Linux 上使用它,请尝试pyautogui库。对于多个键,您需要使用热键,例如:

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

对我来说它有效 - 请参见此处: How to pass a keystroke (ALT+TAB) using Popen.communicate (on Linux)?

于 2018-01-26T14:40:20.060 回答
2

如果您在 Windows 上,请使用Sendkeys;如果在 Linux 上,请尝试此处针对 xsendkeys 或 pexpect 给出的建议。

于 2011-04-19T09:15:52.287 回答
1

我发现的最简单的解决方案是使用pynput。您可以执行以下操作:

from pynput.keyboard import Key, Controller

keyboard = Controller()
with keyboard.pressed(Key.ctrl):
   keyboard.press(Key.f4)
   keyboard.release(Key.f4)
于 2020-10-06T21:56:26.050 回答