2009-06-03 9 views
5

मैं उपलब्ध डीबीस इंटरफ़ेस गुणों की सूची कैसे प्राप्त करूं?डीबीस इंटरफ़ेस गुण

मैं एक ऐसी स्क्रिप्ट लिख रहा हूं जो विशिष्ट प्रकार के यूएसबी डिवाइस कनेक्शन को ट्रैक करेगा। सभी यूएसबी कनेक्शन से कनेक्शन को ट्रैक करने का एक तरीका मुझे लगता है कि सिग्नल इंटरफेस के गुणों की जांच करना डीबीस यूएसबी कनेक्शन पर भेज रहा है। मैं प्रासंगिक चुनने के लिए ऐसी सभी संपत्तियों की सूची प्राप्त करना चाहता हूं।

मेरे कोड है:

सभी की
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) 

उत्तर

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' कमांड के साथ रुचि रखने वाले गुण ढूंढ सकते हैं।

2

सामान्य रूप से, आप org.freedesktop.DBus.Properties इंटरफ़ेस पर GetAll विधि का उपयोग कर सकते हैं।

0

मुझे हाल ही में एक ही समस्या का सामना करना पड़ा (विशेष रूप से हैल के साथ नहीं)। मुझे यकीन नहीं है कि यह सार्वभौमिक रूप से धारण करता है लेकिन यह 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 
संबंधित मुद्दे