Je joue avec DBus-Python et j'ai besoin d'obtenir les réponses (f.e dbus.dictionner - mais généralement toute réponse) comme type python natif. Oui, on peut écrire un convertisseur récursif mais je pense que je dois avoir manqué quelque chose d'évident? Il doit y avoir un moyen de reconvertir ces monstruosités vers des types natifs Python à l'aide de DBU. Ou ce n'est pas?
3 Réponses :
Vous n'avez pas besoin de. Ce sont des sous-classes des types indigènes. Vous venez de les utiliser comme si elles étaient des types indigènes:
>>> import dbus >>> v = dbus.Dictionary({dbus.String(u'CanGoNext'): dbus.Boolean(True, variant_level=1), dbus.String(u'CanPause'): dbus.Boolean(False, variant_level=1), dbus.String(u'MinimumRate'): dbus.Int32(14, variant_level=1)}) >>> print v['MinimumRate'] 14 >>> if v['CanGoNext']: print 'Go' ... Go >>> if v['CanPause']: print 'Pause' ... >>>
Dans votre code, vous n'avez pas besoin de faire quoi que ce soit pour les utiliser comme @Martin Vidner dit.
à jolie imprimée Vous pouvez utiliser un "convertisseur récursif" existant tel que Il perce des informations sur les types. P> P> JSON code>: < / p>
sortie h3>
C'était exactement ce que j'avais besoin de faire (et j'ai fait). Json a été gonflé avec toutes les sous-classes représentées comme "dbus.string", etc.
Pendant que Martin a raison, cela ne fonctionne pas avec des booléens qui sont lancés sur Int par Python (puisque Bool ne peut pas être sous-classement ). Malheureusement, un convertisseur récursif est le seul moyen de préserver les booléens. P> Voici un exemple de mise en oeuvre: p> def convert_to_python(func):
def wrapper(*args, **kwargs):
return dbus_to_python(func(*args, **kwargs))
return wrapper
...
@convert_to_python
def dbus_method_call(self):
return self.dbus_proxy.Method()