2013-04-23 2 views
0

Мой рабочий стол GNOME, и я программно меняю его настройки с помощью Python.GNOME конфигурации базы данных тип-вывод

База данных имеет простые типы значений, например. строки, ints, списки строк, список ints, ...

Простым инструментом CLI для управления данными является gconftool-2, который возвращает значения для ключей, используя опцию --get.

Я не знаю, чтобы вывести тип из этих значений, учитывая, что мне нужно знать значение при его возвращении к чему-то. Обратите внимание: в моей схеме «8» - это строка, а 8 - int, но оба они выводятся как 8 на gconftool-2.

Как бы вы это сделали?

ответ

2

Вместо вызова инструмента командной строки, попробуйте использовать модуль gconf, включенный в привязок GNOME Python:

>>> import gconf 
>>> client = gconf.Client() 
>>> # Get a value and introspect its type: 
>>> value = client.get('/apps/gnome-terminal/profiles/Default/background_color') 
>>> value.type 
<enum GCONF_VALUE_STRING of type GConfValueType> 
>>> value.get_string() 
'#FFFFFFFFDDDD' 

Для списков, вы можете вникать тип значения списка:

>>> value = client.get('/apps/compiz-1/general/screen0/options/active_plugins') 
>>> value.type 
<enum GCONF_VALUE_LIST of type GConfValueType> 
>>> value.get_list_type() 
<enum GCONF_VALUE_STRING of type GConfValueType> 
>>> value.get_list() 
(<GConfValue at 0x159aa80>, <GConfValue at 0x159aaa0>, ...) 

В В общем, вы должны знать типы ключей, которыми вы управляете, и напрямую использовать соответствующие методы доступа к конкретному типу (например, Client.get_string и Client.set_string).

+0

Это звучит как лучший, более здравый, более здравый/разумный/чистый подход для скриптов gconf на Python. Я отчитаю, если он исправил мою проблему со списками ints, списками строк. – Robottinosino

+0

Списки строк дайте мне следующее: , и я не уверен, как распознать список int и т. д. Пример: (как вы используете gnome-terminal ..) global/active_encodings – Robottinosino

+0

значения перечисления предоставляются как глобальные значения в 'gconf'. Поэтому вы можете сделать 'if value.type == gconf.VALUE_STRING': ...' –