【问题标题】:Find a HAL object based on /dev node path根据 /dev 节点路径查找 HAL 对象
【发布时间】:2009-06-08 13:02:18
【问题描述】:

我正在使用 python-dbus 与 HAL 交互,我需要根据设备在 /dev 层次结构中的路径找到设备的 UDI。

所以给定一个路径,比如/dev/sdb,我想得到一个值,比如/org/freedesktop/Hal/devices/usb_device_10

【问题讨论】:

    标签: python dbus hal


    【解决方案1】:

    纯python解决方案:

    import dbus
    bus = dbus.SystemBus()
    obj = bus.get_object("org.freedesktop.Hal", "/org/freedesktop/Hal/Manager")
    iface = dbus.Interface(obj, "org.freedesktop.Hal.Manager")
    print iface.FindDeviceStringMatch("block.device", "/dev/sda")
    

    【讨论】:

    • 出现此错误对我不起作用:DBusException: org.freedesktop.DBus.Error.AccessDenied: Rejected send message, 1 match rules; type="method_call", sender=":1.74" (uid=1000 pid=3181 comm="python /usr/bin/ipython") interface="org.freedesktop.Hal.Manager" member="FindDeviceStringMatch" 错误名称= "(unset)" requested_reply="0" destination=":1.77" (uid=0 pid=4111 comm="/usr/sbin/hald ") 可能是因为我不是root。
    【解决方案2】:

    我会从 Python 产生一个 hal-find-by-property 调用:

    import subprocess
    def get_UDI(path):
        cmd = 'hal-find-by-property --key block.device --string %s' % path
        proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
        output = proc.communicate()
        # stdout
        return output[0].strip()
    
    print get_UDI('/dev/sdb') # /org/freedesktop/Hal/devices/xxxxxx
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多