在尝试使用GSettings架构之前,如何确定它是否存在?

时间:2012-11-03 10:18:41

标签: python pygobject gio

如果存在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 个答案:

答案 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)

>

根据文档,如果模式不存在,查找应该返回NULLNone),但是在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;
}