Как я могу узнать, существует схема GSettings или нет, прежде чем пытаться использовать ее?

Если схема GSettings существует и была скомпилирована, обычно нет проблем с ее чтением. Однако, если он не существует, обычно выдается ошибка, которая не может быть обработана. Попробуйте это в файле или консоли Python:

from gi.repository import Gio
try:
    settings = Gio.Settings("com.example.doesnotexist")
except:
    print "Couldn't load those settings!"

Я как можно шире с except, но это ошибка, которая выбрасывается.

(процесс:10248): GLib-GIO-ERROR **: схема настроек com.example.doesnotexist не установлена

Что я в основном хочу сделать, это выяснить, если com.example.doesnotexist схема существует или нет; если нет, то попросите пользователя запустить мой скрипт установки перед использованием моего приложения. Любые другие предложения по этому поводу будут приветствоваться.

2 ответа

Решение

Вы можете использовать GSettingsSchemaSource. Например:

> from gi.repository import Gio
> source = Gio.SettingsSchemaSource.get_default()
> source.lookup("org.gnome.Epiphany", True)
<GSettingsSchema at 0xa462800>
> source.lookup("com.example.doesnotexist", True)

>

Согласно документации, поиск должен вернуться NULL (None), если схема не существует, однако в PyGObject возвращает NoneType. В любом случае, вы можете использовать его, чтобы проверить, существует схема или нет.

Я знаю, что это для Python. Но вот решение для людей, использующих C:

      gboolean g_settings_schema_exist (const char * id)
{ 
  gboolean ret = FALSE;
  GSettingsSchema * res = g_settings_schema_source_lookup (
                                 g_settings_schema_source_get_default(), 
                                 id, FALSE);                                 
  if (res != NULL)
  {
    ret = TRUE;
    g_object_unref (res);
  }
  
  return ret;
}
Другие вопросы по тегам