【问题标题】:DBus interface propertiesDBus 接口属性
【发布时间】:2010-10-31 00:12:24
【问题描述】:

如何获取可用 DBus 接口属性的列表?

我正在编写一个脚本来跟踪特定类型的 USB 设备连接。我猜想将要跟踪的连接与所有 USB 连接区分开来的一种方法是检查 DBus 在 USB 连接上发送的信号接口的属性。我想获取所有此类属性的列表以选择相关的。

我的代码是:

    import sys
    import dbus
    from dbus.mainloop.glib import DBusGMainLoop
    import gobject

    def deviceAdded(udi):
        device = bus.get_object("org.freedesktop.Hal", udi)
        device_if = dbus.Interface(device, 'org.freedesktop.Hal.Device')
        if device_if.GetPropertyString('info.subsystem') == 'usb_device':
            #
            # Properties can be accesed like this:
            # vendor_id = device_if.GetPropertyInteger('usb_device.vendor_id')
            # 
            # how to get the list of all properties?
            #
            # do something

    def deviceRemoved(udi):
        # do something
        pass

    if __name__ == "__main__":
    DBusGMainLoop(set_as_default=True)
    bus = dbus.SystemBus()

    bus.add_signal_receiver( 
        deviceAdded,
        'DeviceAdded',
        'org.freedesktop.Hal.Manager',
        'org.freedesktop.Hal',
        '/org/freedesktop/Hal/Manager')

    bus.add_signal_receiver( 
        deviceRemoved,
        'DeviceRemoved',
        'org.freedesktop.Hal.Manager',
        'org.freedesktop.Hal',
        '/org/freedesktop/Hal/Manager')

    loop = gobject.MainLoop()

    try:
        loop.run()
    except KeyboardInterrupt:
        print "usb-device-tracker: keyboad interrupt received, shutting down"
        loop.quit()
        sys.exit(0)

【问题讨论】:

    标签: python properties interface dbus


    【解决方案1】:

    一般情况下,可以在org.freedesktop.DBus.Properties接口上使用GetAll方法。

    【讨论】:

      【解决方案2】:

      首先,检查 hal 文档和来源,它们永远是你的朋友。

      import dbus
      bus = dbus.SystemBus()
      dev = bus.get_object("org.freedesktop.Hal", u'/org/freedesktop/Hal/devices/computer_logicaldev_input')
      iface = dbus.Interface(dev, 'org.freedesktop.Hal.Device')
      props = iface.GetAllProperties()
      print "\n".join(("%s: %s" % (k, props[k]) for k in props))
      

      作为最后的手段,您始终可以使用“lshal”命令找到您感兴趣的属性。

      【讨论】:

        【解决方案3】:

        我最近遇到了同样的问题(不是专门针对 Hal)。我不确定这是否普遍适用,但它可以(至少经常)通过org.freedesktop.DBus.Properties 接口检索(正如@daf 建议的那样)。

        bus = dbus.SystemBus()
        device = bus.get_object(...)
        
        your_interface = 'org.freedesktop.Hal.Device' # for this example
        props_iface = dbus.Interface(device, 'org.freedesktop.DBus.Properties')
        properties = props_iface.GetAll(your_interface) #properties is a dbus.Dictionary
        

        【讨论】:

          猜你喜欢
          • 2011-04-14
          • 2011-05-15
          • 2013-12-01
          • 2012-11-13
          • 1970-01-01
          • 2012-03-18
          • 1970-01-01
          • 1970-01-01
          • 2012-09-02
          相关资源
          最近更新 更多