Объект типа pyudev "Context" не имеет атрибута "_libudev"

Я использую библиотеку Pyudev на Debian GNU/Linux 8.7 (jessie) с python2.7 обнаруживать USB-устройства следующим образом:

import sys
import pyudev

def main():
    os = canary.helpers.get_platform_system()

    if os.lower() == "linux":
        print("linux")
        context = pyudev.Context

        monitor = pyudev.Monitor.from_netlink(context)
        monitor.filter_by(device_type='usb')

    elif os.lower() == 'darwin': # actually OS X
        print("OS X is currently not supported, if you would like to add support make a pull request. Aborting...")
        sys.exit()
    elif os.lower() == 'windows':
        print("Windows is currently not supported, if you would like to add support make a pull request. Aborting...")
        sys.exit()
    else:
        print("Unknown operating system. Aborting...")
        sys.exit()


if __name__ == "__main__":
    main()

Как показано в нескольких примерах - однако, когда я запускаю код, я получаю следующую ошибку:

/usr/bin/python2.7 /home/marvin/src/usb_canary/usb_canary.py
linux
Traceback (most recent call last):
File "/home/marvin/src/usb_canary/usb_canary.py", line 45, in <module>
main()
File "/home/marvin/src/usb_canary/usb_canary.py", line 30, in main
monitor = pyudev.Monitor.from_netlink(context)
File "/usr/local/lib/python2.7/dist-packages/pyudev/monitor.py", line 121, in from_netlink
monitor = context._libudev.udev_monitor_new_from_netlink(
AttributeError: type object 'Context' has no attribute '_libudev'

Первоначально после установки pyudev через пипс я забыл убедиться libudev-dev установлен, поэтому я установил libudev-devудалено pyudev и переустановил его через pip, но ошибка не исчезла.

Я сейчас бегу libudev-dev версия 215

Кто-нибудь может посоветовать, почему эта ошибка может происходить и как ее можно исправить? Я просмотрел их проблемы с Github, но не нашел никого, имеющего такую ​​же проблему, я также взглянул на их вики-версию Read the Docs, но до сих пор не повезло.

1 ответ

Решение

Кажется, вам нужно создать экземпляр Context, чтобы использовать его, поэтому добавьте паратезы:

context = pyudev.Context()

затем filter_by требует другого входного аргумента. Но если вы посмотрите на документы, вы, вероятно, сможете это понять.

Другие вопросы по тегам