Более простой способ получить доступ к системе по умолчанию OSX через Python и Ruby? - PullRequest
2 голосов
/ 18 февраля 2011

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

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

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

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

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

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

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

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

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

1 Ответ

2 голосов
/ 18 февраля 2011

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

from Foundation import *
standardUserDefaults = NSUserDefaults.standardUserDefaults()
persistentDomains = standardUserDefaults.persistentDomainNames()
persistentDomains.objectAtIndex_(14)
aDomain = standardUserDefaults.persistentDomainForName_(persistentDomains[14])
aDomain.keys()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...