Pembaca yang sederhana dan mentah dapat dilakukan dengan menggunakan:
#!/usr/bin/python
import struct
import time
import sys
infile_path = "/dev/input/event" + (sys.argv[1] if len(sys.argv) > 1 else "0")
"""
FORMAT represents the format used by linux kernel input event struct
See https://github.com/torvalds/linux/blob/v5.5-rc5/include/uapi/linux/input.h#L28
Stands for: long int, long int, unsigned short, unsigned short, unsigned int
"""
FORMAT = 'llHHI'
EVENT_SIZE = struct.calcsize(FORMAT)
#open file in binary mode
in_file = open(infile_path, "rb")
event = in_file.read(EVENT_SIZE)
while event:
(tv_sec, tv_usec, type, code, value) = struct.unpack(FORMAT, event)
if type != 0 or code != 0 or value != 0:
print("Event type %u, code %u, value %u at %d.%d" % \
(type, code, value, tv_sec, tv_usec))
else:
# Events with code, type and value == 0 are "separator" events
print("===========================================")
event = in_file.read(EVENT_SIZE)
in_file.close()
Paket python-evdev menyediakan pengikatan ke antarmuka perangkat acara. Contoh penggunaan singkatnya adalah:
from evdev import InputDevice
from select import select
dev = InputDevice('/dev/input/event1')
while True:
r,w,x = select([dev], [], [])
for event in dev.read():
print(event)
# event at 1337427573.061822, code 01, type 02, val 01
# event at 1337427573.061846, code 00, type 00, val 00
Perlu diingat bahwa, tidak seperti modul Pythonic murni yang disebutkan sejauh ini, evdev berisi ekstensi C. Membangunnya membutuhkan pengembangan Python dan header kernel Anda.
Di sini, di modul Input.py. Anda juga memerlukan modul event.py.
Formatnya dijelaskan dalam Documentation/input/input.txt
file di sumber Linux. Pada dasarnya, Anda membaca struct dari formulir berikut dari file:
struct input_event {
struct timeval time;
unsigned short type;
unsigned short code;
unsigned int value;
};
type
dan code
adalah nilai yang didefinisikan dalam linux/input.h
. Misalnya, ketik mungkin EV_REL
untuk momen relatif mouse, atau EV_KEY
untuk penekanan tombol, dan code
adalah kode kunci, atau REL_X
atau ABS_X
untuk hiburan.