如果存在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
架构是否存在;如果没有,那么告诉用户在使用我的应用程序之前运行我的安装脚本。关于这样做的任何其他建议都是受欢迎的。
答案 0 :(得分:5)
您可以使用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。无论如何,您可以使用它来检查架构是否存在。
答案 1 :(得分:0)
我知道是针对 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;
}