2009-06-03 23 views
5

Kullanılabilir DBus arabirimi özelliklerinin listesini nasıl alabilirim?DBus arabirim özellikleri

Belirli türde USB aygıt bağlantılarını izleyen bir komut dosyası yazıyorum. Tüm usb bağlantılarından izlenecek bağlantıları ayırt etmenin bir yolu, sinyallerin arayüzlerinin özelliklerini kontrol etmektir. DBus, bir USB bağlantısı üzerinden gönderiyor. İlgili olanları seçmek için tüm bu özelliklerin listesini almak istiyorum.

Benim kodudur: Herşeyden

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) 

cevap

2

Birincisi, Hal dokümantasyon ve kaynaklarını kontrol, daima arkadaşımsın.

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)) 

Son çare olarak, 'lshal' komutuyla ilgilendiğiniz özellikleri her zaman bulabilirsiniz.

2

Genel olarak, org.freedesktop.DBus.Properties arabirimindeki GetAll yöntemini kullanabilirsiniz.

0

Kısa süre önce aynı sorunla karşılaştım (özellikle Hal ile değil). Bunun evrensel olarak tutulduğundan emin değilim, ancak org.freedesktop.DBus.Properties arabirimi üzerinden (en çok önerildiği gibi) alınabilir.

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