如何在python中模拟击键?我也想同时按下多个键。
类似的东西:
keystroke('CTRL+F4')
或
keystroke('Shift+A')
答案 0 :(得分:15)
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-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()
答案 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)