2010-04-04 13 views
12

Estoy escribiendo un script para automatizar la ejecución de un modelo en particular. Cuando el modelo falla, espera la entrada del usuario (tecla Enter). Puedo detectar cuándo ha fallado el modelo, pero no puedo usar Python (en Linux) para simular un evento de pulsación de tecla. Windows tiene la biblioteca SendKeys para hacer esto, pero me preguntaba si existe una biblioteca similar para python en Linux.Simulación de evento de pulsación de tecla con Python para Linux

Gracias!

Respuesta

6

Si el "modelo" se está ejecutando de forma gráfica (con el sistema de ventanas X), la ya sugerido xsendkey es una posibilidad, o xsendkeycode. Si se está ejecutando textualmente (en una ventana de terminal), entonces pexpect.

+0

¡Gracias! Pecpect debería hacer el truco para mí. – user308827

+0

¡Hola! Un corolario: Durante el uso de pexpect, no parece el siguiente programa sencillo para trabajar para mí: pexpect importación niño = pexpect.spawn ('ls') fout = archivo ('salida.txt', 'w ') child.logfile = fout Es decir, se crea output.txt pero está vacío cuando lo hago. pexpect está bien instalado, ya que puedo ejecutar las muestras suministradas con el programa. ¡Cualquier sugerencia sería apreciada! gracias! – user308827

+7

Los enlaces a 'xsendkey' y' xsendkeycode' están muertos. – hazzey

4

Un enfoque más de bajo nivel sería crear un dispositivo uinput desde el que luego inyectaría eventos de entrada en el subsistema de entrada de Linux. Tenga en cuenta las siguientes bibliotecas:

Ejemplo de enviar <enter> con este último:

from evdev import uinput, ecodes as e 

with uinput.UInput() as ui: 
    ui.write(e.EV_KEY, e.KEY_ENTER, 1) 
    ui.write(e.EV_KEY, e.KEY_ENTER, 0) 
    ui.syn() 
12

Tener un vistazo a este https://github.com/SavinaRoja/PyUserInput su control multiplataforma para mouse y teclado en python

El control del teclado funciona en X11 (Linux) y sistemas Windows. Pero no hay soporte para Mac (cuando escribí esta respuesta).

from pykeyboard import PyKeyboard 
k = PyKeyboard() 

# To Create an Alt+Tab combo 
k.press_key(k.alt_key) 
k.tap_key(k.tab_key) 
k.release_key(k.alt_key) 
+0

¿Sabes cómo 'tocar' la tecla de espacio? – user3768495

+0

Eche un vistazo a estos proyectos, la clave de espacio debe estar asignada a '' (cadena con espacio) https: // github.com/Narengowda/web-mouse/blob/master/web_mouse/mouse_wsh.py # L62 https://github.com/SavinaRoja/PyUserInput/blob/master/pykeyboard/x11.py#L28 – naren

+0

Se me ocurrió algo así como 'k.tab_key (k.keypad_keys ['Space'])' pero no funciona. Es difícil para mí entender la documentación del proyecto. ¿Podrias ayudarme por favor? – user3768495

1

Yo recomiendo PyAutoGui. Es ridículamente simple de usar, es multiplataforma y es para Python 3 y 2.

En la página enlazada se enumeran las dependencias y algunos ejemplos de código.

Cuestiones relacionadas