6
votes

DBUS-Python Comment obtenir une réponse avec des types indigènes?

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? XXX


0 commentaires

3 Réponses :


1
votes

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'
... 
>>> 


0 commentaires

1
votes

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 JSON : < / p> xxx

sortie xxx

Il perce des informations sur les types.


1 commentaires

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.



3
votes

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 ). XXX PRE>

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


0 commentaires