使用Python模拟Linux中的击键

时间:2011-04-19 09:11:03

标签: python linux simulation keystroke

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

类似的东西:

keystroke('CTRL+F4')

keystroke('Shift+A')

6 个答案:

答案 0 :(得分:15)

python-uinput

  

Pythonic API to Linux uinput kernel module ...

     

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

答案 1 :(得分:13)

虽然它特定于X,但您可以在基于Debian的系统上安装xautomation软件包(apt-get install xautomation)并使用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)

答案 2 :(得分:12)

考虑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()

答案 3 :(得分:2)

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

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

对我来说它有用 - 见这里: How to pass a keystroke (ALT+TAB) using Popen.communicate (on Linux)?

答案 4 :(得分:1)

如果您使用的是Windows,请使用Sendkeys,如果是在Linux上,请尝试使用xsendkeys或pexpect的建议given here

答案 5 :(得分:0)

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

df['shifted_label'] = df.groupby(['ID_1','ID_2']).label.shift(1)
def get_sequence_group(grouped) :
    return (grouped['shifted_label'] != grouped['label']).cumsum()
df.groupby(['ID_1','ID_2']).apply(get_sequence_group)