pyudev – pure Python libudev binding

pyudev 0.21.0 (Changelog, installation)

pyudev is a LGPL licenced, pure Python 2/3 binding to libudev, the device and hardware management and information library of Linux.

Almost the complete libudev functionality is exposed. You can:

  • Enumerate devices, filtered by specific criteria (pyudev.Context)
  • Query device information, properties and attributes,
  • Monitor devices, both synchronously and asynchronously with background threads, or within the event loops of Qt (pyudev.pyqt4, pyudev.pyside), glib (pyudev.glib) and wxPython (pyudev.wx).


Thanks to the power of libudev, usage of pyudev is very simple. Getting the labels of all partitions just takes a few lines:

>>> import pyudev
>>> context = pyudev.Context()
>>> for device in context.list_devices(subsystem='block', DEVTYPE='partition'):
...     print(device.get('ID_FS_LABEL', 'unlabeled partition'))

A user guide gives an introduction into common operations and concepts of pyudev, the API documentation provides a detailed reference:


Please report issues, bugs and questions to the issue tracker, but respect the following guidelines:

  • Check that the issue has not already been reported.
  • Check that the issue is not already fixed in the master branch.
  • Open issues with clear title and a detailed description in grammatically correct, complete sentences.
  • Include the Python version and the udev version (see udevadm --version) in the description of your issue.


The source code is hosted on GitHub:

git clone

If you want to contribute to pyudev, please read the guidelines for contributions and the testsuite documentation.


If you’re using pyudev and want to say something about it please add yourself to the endorsements page.

Other reading