Более простой способ получить доступ к системе по умолчанию OSX через Python и Ruby?

1

Недавно я стал поклонником хранения различных настроек, используемых для моих тестовых скриптов в OSX defaults, поскольку он позволяет мне поддерживать различные сценарии в git и нажимать их на github, не беспокоясь о том, чтобы оставить пароли/настройки/etc жестко закодированными в script.

При написании оболочки script с помощью простых команд bash достаточно просто использовать обратные вызовы для вызова двоичного файла по умолчанию для чтения предпочтений, и если есть ошибка, читающая предпочтение, script останавливает выполнение и вы можете увидеть ошибку и исправить ее. Когда я пытаюсь сделать аналогичную вещь в Python или Ruby, она имеет тенденцию быть немного более раздражающей, так как вам нужно выполнить дополнительную работу, чтобы проверить код возврата по умолчанию, чтобы увидеть, есть ли ошибка.

Я пытаюсь выполнить поиск через google, чтобы библиотека использовала систему по умолчанию OSX, которая в конечном итоге оказалась несколько сложной, когда "по умолчанию" является частью вашей строки запроса.

Я думал о попытке напрямую прочитать файлы plist, но кажется, что библиотеки plist, которые я нашел (например, встроенный в python), могут читать только XML (а не двоичные), что является проблемой если я когда-либо установил что-либо с программой по умолчанию, так как он преобразует ее обратно в двоичный plist.

Недавно при попытке другого поиска библиотеки Python я изменил условия поиска на что-то, используя что-то вроде NSUserDefaults (теперь я забыл точный термин). Я нашел библиотеку Python под названием userdefaults, но он был разработан для более ранней версии OSX (10.2) с более старой версией Python (2.3), и мне не повезло, что он смог скомпилировать ее на OSX 10.6 и Python 2.6

В идеале я хотел бы найти библиотеку, которая упростит чтение (и в качестве бонусной записи) системы OSX по умолчанию таким же образом, как и следующий код psudo python.

from some.library.defaults import defaults
settings = defaults('com.example.app')
print settings['setting_key']

Поскольку я также начинаю использовать Ruby больше, мне также хотелось бы найти библиотеку Ruby с аналогичной функциональностью.

Возможно, я должен в конечном итоге просто "отказаться" и написать свою собственную простую библиотеку вокруг двоичного файла по умолчанию, но я подумал, что не помешает запросить других, чтобы увидеть, существует ли существующее решение.

Теги:
macos

1 ответ

2
Лучший ответ

Вы хотите использовать PyObjC: посмотрите эту статью на mactech.com (в частности: прокрутите вниз до "Доступ к plists Via Python" ). И эта статья из oreilly на PyObjC. Запустите это, например:

from Foundation import *
standardUserDefaults = NSUserDefaults.standardUserDefaults()
persistentDomains = standardUserDefaults.persistentDomainNames()
persistentDomains.objectAtIndex_(14)
aDomain = standardUserDefaults.persistentDomainForName_(persistentDomains[14])
aDomain.keys()
  • 0
    Спасибо, это выглядит многообещающе. Мне нужно проверить это в эти выходные.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню