Как я могу узнать, существует схема 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;
}