2016-01-04 6 views
0

Я пытаюсь переписать связанный с Glib/dbus код C на python. Соответствующий код C:Glib: привязка g_variant_get для python

GVariant *real_value; 
JsonNode *root; 
JsonGenerator *generator; 
gsize json_length; 
gchar *json; 

GDBusProxy *proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, 
              G_DBUS_PROXY_FLAGS_NONE, 
              NULL, /* interface info */ 
              "org.gnome.Shell", 
              "/org/gnome/Shell", 
              "org.gnome.Shell.Extensions", 
              NULL, /* GCancellable */ 
              &error); 
GVariant *variant = g_dbus_proxy_call_sync (obj->proxy, 
          "ListExtensions", 
          NULL, /* parameters */ 
          G_DBUS_CALL_FLAGS_NONE, 
          -1, /* timeout */ 
          NULL, /* cancellable */ 
          &error); 

g_variant_get (variant, "(@*)", &real_value); 
root = json_gvariant_serialize (real_value); 
generator = json_generator_new(); 
json_generator_set_root (generator, root); 
json = json_generator_to_data (generator, &json_length); 

Мой питон код:

proxy = Gio.DBusProxy.new_for_bus_sync(Gio.BusType.SESSION, 
        Gio.DBusProxyFlags.NONE, 
        None, 
        'org.gnome.Shell', 
        '/org/gnome/Shell', 
        'org.gnome.Shell.Extensions', 
        None) 
result = proxy.call_sync("ListExtensions", 
       None, 
       Gio.DBusCallFlags.NONE, 
       -1, 
       None) 

real_value = ??? 
root = Json.gvariant_serialize(real_value) 
generator = Json.Generator.new() 
generator.set_root(root) 
data = generator.to_data() 

Проблема заключается в том, что я не вижу никакой g_variant_get() связывания для получения "real_value". Как я могу это сделать в python?

Спасибо!

ответ

0

Так я использовал это:

proxy = Gio.DBusProxy.new_for_bus_sync(Gio.BusType.SESSION, 
       Gio.DBusProxyFlags.NONE, 
       None, 
       'org.gnome.Shell', 
       '/org/gnome/Shell', 
       'org.gnome.Shell.Extensions', 
       None) 
result = proxy.call_sync("ListExtensions", 
      None, 
      Gio.DBusCallFlags.NONE, 
      -1, 
      None) 
jsonStr = json.dumps(result.unpack()[0])