OVH Cloud OVH Cloud

[dbus/hal] get_service a disparu

5 réponses
Avatar
Franck Pommereau
Bonjour à tous,

J'ai mis à jour mon système et il semble qu'une nouvelle version de dbus
soit installée. Du coup, ce code ne fonctionne plus :

import dbus
system_bus = dbus.SystemBus()
hal_service = system_bus.get_service("org.freedesktop.Hal")

À l'exécution :

hal_service = system_bus.get_service("org.freedesktop.Hal")
AttributeError: SystemBus instance has no attribute 'get_service'

Comment puis-je maintenant récupérer hal_service ?

Merci d'avance !
Franck

5 réponses

Avatar
Do Re Mi chel La Si Do
Bonsoir !


Je suppose que tu es avec un Linux quelconque. Alors, tout ce que je sais de
dbus, c'est que cette n-ième tentative pour trouver un semblant d'équivalent
à COM (de windows) souffre de très nombreux problèmes, patches, failles,
etc.
Skype, qui utilise dbus, n'arrête pas de sortir des mises à jour de son API
linux.

Je pense que cela sera très bien, lorsque ce sera stabilisé. D'ailleurs,
mon principal frein à plus grande utilisation de linux, c'est le manque de
techno inter-applicatives universelle et qui fonctionne.

Si dbus se met à bien marcher, et est facilement utilisable avec Python, je
devrais jeter un oeil. Donc, j'espère que tu va trouver une solution.


@-salutations

Michel Claveau
Avatar
Hervé Cauwelier
Comment puis-je maintenant récupérer hal_service ?


Vu que dbus/hal doivent changer d'API à peu près toutes les deux
semaines... et que l'interface Python coupe tous les anciens noms sans
aucun warning... Bref, à moins d'avoir une pointure de dbus/hal sur
cette liste, le mieux est d'aller voir sur leur site la documentation à
jour et leurs forums/listes ; tu n'es sûrement pas le seul à t'être fait
avoir. Une petite recherche Google/Yahoo ? ;-)

--
Hervé Cauwelier
http://www.oursours.net/

Avatar
Franck Pommereau
jour et leurs forums/listes ; tu n'es sûrement pas le seul à t'être fait
avoir. Une petite recherche Google/Yahoo ? ;-)


J'ai trouvé les questions, mais pas les réponses ! (À part : regarde
dans le CVS.)

Merci quand même,
Franck

Avatar
Franck Pommereau
Si dbus se met à bien marcher, et est facilement utilisable avec Python, je
devrais jeter un oeil.


En fait je trouve que ça marche très bien et que c'est très pratique. La
doc est succincte mais suffisante. Sauf en l'occurrence où elle n'est
pas à jour. Il me semble que Gnome et KDE ont adopté dbus (ou vont le
faire), espérons que ça forcera le projet à se stabiliser rapidement...

Donc, j'espère que tu va trouver une solution.


Merci !

Franck

Avatar
Franck Pommereau
import dbus
system_bus = dbus.SystemBus()
hal_service = system_bus.get_service("org.freedesktop.Hal")

À l'exécution :

hal_service = system_bus.get_service("org.freedesktop.Hal")
AttributeError: SystemBus instance has no attribute 'get_service'


J'ai trouvé une solution à force de tâtonner sur les exemples.

import dbus
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
import dbus.glib
system_bus = dbus.SystemBus()
hal_manager_obj = system_bus.get_object('org.freedesktop.Hal',
'/org/freedesktop/Hal/Manager')
hal_manager = dbus.Interface(hal_manager_obj,
'org.freedesktop.Hal.Manager')

Donc, on n'a plus hal_service, du coup, au lieu de faire des choses comme :

dev = hal_service.get_object(udi, "org.freedesktop.Hal.Device")

on fera plutôt :

obj = system_bus.get_object('org.freedesktop.Hal', udi)
dev = dbus.Interface(obj, 'org.freedesktop.Hal.Device')

Par ailleurs, les callbacks sur DeviceAdded et DeviceRemoved ont changé
et ne prennent plus qu'un seul argument : l'udi du périphérique concerné.

Et voilà. (Jusqu'au prochain changement !)

Bien à vous,
Franck