2009-06-08 3 views
2

J'utilise python-dbus pour l'interface avec HAL et j'ai besoin de trouver l'UDI d'un périphérique en fonction de son chemin dans la hiérarchie /dev.Recherche d'un objet HAL basé sur le chemin du noeud/dev

Donc, étant donné un chemin tel que /dev/sdb, je veux obtenir une valeur de retour comme /org/freedesktop/Hal/devices/usb_device_10.

Répondre

3

solution python pur:

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") 
+0

+1 pour moi enseigner comment utiliser dbus :) – NicDumZ

+0

Ne fonctionne pas pour moi avec cette erreur: DBusException: org.freedesktop.DBus.Error.AccessDenied: message d'envoi rejeté, 1 règles correspondantes; type = "method_call", expéditeur = ": 1.74" (uid = 1000 pid = 3181 comm = "python/usr/bin/ipython") interface = "org.freedesktop.Hal.Manager" membre = "FindDeviceStringMatch" nom d'erreur = "(unset)" requested_reply = "0" destination = ": 1.77" (uid = 0 pid = 4111 comm = "/ usr/sbin/hald") Probablement parce que je ne suis pas la racine. –

1

J'engendrerait un hal-find-by-property appel de Python:

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 
Questions connexes