Skip to main content

Human friendly interface to linux subsystems using python

Project description

linuxpy

linuxpy Python Versions License CI

Source Documentation

Human friendly interface to linux subsystems using python.

Provides python access to several linux subsystems like V4L2, GPIO, Led, thermal, input and MIDI.

There is experimental, undocumented, incomplete and unstable access to USB.

Requirements:

  • python >= 3.11
  • Fairly recent linux kernel
  • Installed kernel modules you want to access

And yes, it is true: there are no python libraries required! Also there are no C libraries required. Everything is done here through direct ioctl, read and write calls. Ain't linux wonderful?

Installation

From within your favorite python environment:

$ pip install linuxpy

To run the examples you'll need:

$ pip install linuxpy --group=examples

To develop, run tests, build package, lint, etc you'll need:

$ pip install linuxpy --group=dev

Subsystems

GPIO

from linuxpy.gpio import Device

with Device.from_id(0) as gpio:
    info = gpio.get_info()
    print(info.name, info.label, len(info.lines))
    l0 = info.lines[0]
    print(f"L0: {l0.name!r} {l0.flags.name}")

# output should look somethig like:
# gpiochip0 INT3450:00 32
# L0: '' INPUT

Check the GPIO user guide and GPIO reference for more information.

Input

import time
from linuxpy.input.device import find_gamepads

pad = next(find_gamepads())
abs = pad.absolute

with pad:
    while True:
	    print(f"X:{abs.x:>3} | Y:{abs.y:>3} | RX:{abs.rx:>3} | RY:{abs.ry:>3}", end="\r", flush=True)
	    time.sleep(0.1)

Check the Input user guide and Input reference for more information.

Led

from linuxpy.led import find

caps_lock = find(function="capslock")
print(caps_lock.brightness)
print(caps_lock.max_brightness)

Check the LED user guide and LED reference for more information.

MIDI Sequencer

$ python

>>> from linuxpy.midi.device import Sequencer, event_stream

>>> seq = Sequencer()
>>> with seq:
        port = seq.create_port()
        port.connect_from(14, 0)
        for event in seq:
            print(event)
 14:0   Note on              channel=0, note=100, velocity=3, off_velocity=0, duration=0
 14:0   Clock                queue=0, pad=b''
 14:0   System exclusive     F0 61 62 63 F7
 14:0   Note off             channel=0, note=55, velocity=3, off_velocity=0, duration=0

Check the MIDI user guide and MIDI reference for more information.

Thermal and cooling

from linuxpy.thermal import find
with find(type="x86_pkg_temp") as tz:
    print(f"X86 temperature: {tz.temperature/1000:6.2f} C")

Check the Thermal and cooling user guide and Thermal and cooling reference for more information.

Video

Video for Linux 2 (V4L2) python library

Without further ado:

>>> from linuxpy.video.device import Device
>>> with Device.from_id(0) as cam:
>>>     for i, frame in enumerate(cam):
...         print(f"frame #{i}: {len(frame)} bytes")
...         if i > 9:
...             break
...
frame #0: 54630 bytes
frame #1: 50184 bytes
frame #2: 44054 bytes
frame #3: 42822 bytes
frame #4: 42116 bytes
frame #5: 41868 bytes
frame #6: 41322 bytes
frame #7: 40896 bytes
frame #8: 40844 bytes
frame #9: 40714 bytes
frame #10: 40662 bytes

Check the V4L2 user guide and V4L2 reference for more information.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

linuxpy-0.24.0.tar.gz (451.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

linuxpy-0.24.0-py3-none-any.whl (453.1 kB view details)

Uploaded Python 3

File details

Details for the file linuxpy-0.24.0.tar.gz.

File metadata

  • Download URL: linuxpy-0.24.0.tar.gz
  • Upload date:
  • Size: 451.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for linuxpy-0.24.0.tar.gz
Algorithm Hash digest
SHA256 2b44434d28d49257e859a4830267a25aa4b51b1d229f95f79d025ae7f1a5d30e
MD5 e8993d1c030aea2abbcc318569d5cb20
BLAKE2b-256 a3f766d76bb3099bce8a952e6114e654d1199d7a02aec90a300294919bd17f77

See more details on using hashes here.

File details

Details for the file linuxpy-0.24.0-py3-none-any.whl.

File metadata

  • Download URL: linuxpy-0.24.0-py3-none-any.whl
  • Upload date:
  • Size: 453.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for linuxpy-0.24.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4e2ce8da45a7a7171bcdcf6b7ab53858d9a83108e24874bd9ddb50a73590a1c6
MD5 9274197e94a2e0cb2158d6d8b5eb7d58
BLAKE2b-256 8ad86ce2855fda8123ff7d127821743de7aa1609cda025183b9c4046d5b36205

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page