pyudev 类型对象“上下文”没有属性“_libudev”

Posted

技术标签:

【中文标题】pyudev 类型对象“上下文”没有属性“_libudev”【英文标题】:pyudev type object 'Context' has no attribute '_libudev' 【发布时间】:2017-01-28 22:57:59 【问题描述】:

我正在使用Debian GNU/Linux 8.7 (jessie) 上的pyudev 库和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'

最初通过 pip 安装 pyudev 后,我忘记确保已安装 libudev-dev,所以我安装了 libudev-dev,卸载 pyudev 并通过 pip 重新安装它,但错误仍然存​​在。

我目前正在运行libudev-dev 215 版

谁能告诉我为什么会发生这个错误以及如何修复它?我查看了他们的 Github 问题,但没有发现任何人遇到同样的问题。我还查看了他们的 Read the Docs wiki,但仍然没有运气。

【问题讨论】:

安装libudev-dev后无需重新安装包。 此外,控制流程似乎过于复杂。一个简单的if os != "linux": print([message]); sys.exit() 就足够了。用户已经知道他们在哪个系统上;) 我计划稍后将脚本分支到其他操作系统,我认为我需要不同的软件包来监控 USB 设备 - 但我现在可能已经过度设计了 【参考方案1】:

看来你需要实例化上下文才能使用它,所以添加括号:

context = pyudev.Context()

那么filter_by 需要另一个输入参数。但是,如果您查看文档,您可能会弄明白。

【讨论】:

愚蠢地代表我忽略。现在可以使用了,谢谢!

以上是关于pyudev 类型对象“上下文”没有属性“_libudev”的主要内容,如果未能解决你的问题,请参考以下文章

尝试减少 Decimal 属性给出:表达式类型不明确,没有更多上下文

Spring Data Cassandra:“用户类型没有属性 findAll”

石墨烯 - GraphQL:“请求”对象没有属性“上下文”

Kivy Buildozer AttributeError:“上下文”对象没有属性“hostpython”

AttributeError:“上下文”对象没有属性“wrap_socket”

有没有办法在没有 xml 或属性文件的情况下将 java 变量/对象存储在应用程序上下文中