用Python在Linux中模拟击键

用Python在Linux中模拟击键,python,linux,simulation,keystroke,Python,Linux,Simulation,Keystroke,如何在python中模拟击键?我还想同时按下多个键 比如: keystroke('CTRL+F4') 或 : 到Linux uinput内核模块的Python API Python uinput是Linux uinput内核模块的Python接口,它允许将用户空间设备驱动程序附加到内核中。实际上,Python uinput使创建虚拟操纵杆、键盘和鼠标以编程方式生成任意输入事件变得非常简单 如果您在Windows上,请使用;如果您在Linux上,请尝试使用xsendkeys或pexpect的建议

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

比如:

keystroke('CTRL+F4')

:

到Linux uinput内核模块的Python API

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


如果您在Windows上,请使用;如果您在Linux上,请尝试使用xsendkeys或pexpect的建议。

虽然它特定于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)
考虑和。带有后者的
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()

如果您计划在Linux上使用它,请尝试library。 对于多个键,您需要使用热键,例如:

pyautogui.hotkey('ctrl', 'c')  # ctrl-c to copy
对我来说,它起作用了——请看这里:

我发现最简单的解决方案是使用。您可以选择以下选项:

from pynput.keyboard import Key, Controller

keyboard = Controller()
with keyboard.pressed(Key.ctrl):
   keyboard.press(Key.f4)
   keyboard.release(Key.f4)

请问你为什么要这样做?还有,在什么环境下?命令行?图形桌面?我可以用小写字母发射吗?请举个例子!!链接是死的我尝试了类似的代码,它被执行了,因为我在系统日志中看到创建了一个新的虚拟输入设备,但是按键没有出现在X中?有什么特别的事情可以让X服务器接收密钥吗?链接是死的,这太棒了!请注意,1是一个keydown事件,0是keydup事件,因此如果您想模拟多次按键和释放按键,则需要在循环中放置类似于以下行的内容:
ui.write(ecodes.EV_key,ecodes.key_DOWN,1)#key DOWN
ui.write(ecodes.EV_key,ecodes.key_DOWN,0)#key up
ui.syn()
它给了我一个错误:
UInputError:“/dev/uinput”无法打开进行写入
任何建议?如何将密钥发送到shell?也适用于windows。
from pynput.keyboard import Key, Controller

keyboard = Controller()
with keyboard.pressed(Key.ctrl):
   keyboard.press(Key.f4)
   keyboard.release(Key.f4)