2011-04-19 81 views
14

¿Cómo puedo simular una pulsación de tecla en python? También quiero presionar varias teclas simultáneamente.Simular pulsaciones de teclas en Linux con Python

Algo así como:

keystroke('CTRL+F4') 

o

keystroke('Shift+A') 
+0

Puedo preguntar por qué quiere hacer esto? Además, ¿en qué entorno? ¿Línea de comando? Escritorio gráfico? –

Respuesta

13

Aunque es específico para X, puede instalar el paquete xautomation (apt-get install xautomation en sistemas basados ​​en Debian) y utilizar xte para simular las pulsaciones de teclas, por ejemplo .:

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) 
+1

¿Cómo puedo enviar las claves al shell? – user2988257

14

python-uinput:

API Pythonic a Linux uinput módulo del kernel ...

Python-es uinput interfaz de Python a Linux uinput kern el módulo que permite unir controladores de dispositivo de espacio de usuario en kernel. En la práctica, Python-uinput hace que sea sencillo para crear muertos joysticks virtuales, teclados y ratones para la generación de eventos de entrada arbitrarias mediante programación ...

+3

¿Puedo emitir en minúscula? por favor un ejemplo !! – karensantana

+0

el enlace está muerto –

1

Si está en Windows, utilice Sendkeys y si en Linux, probar la sugerencia given here para xsendkeys o pexpect.

10

Considere python-uinput y evdev. Ejemplo de shift+a con este último:

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() 
+0

Intenté un código similar, se ejemplifica porque veo en el registro del sistema que se creó un nuevo dispositivo de entrada virtual, pero las pulsaciones de teclas no aparecen en X? ¿Se puede hacer algo especial para que el servidor X reciba las claves? – akostadinov

+0

Los enlaces están muertos –

Cuestiones relacionadas