通过Python和Ruby更简便地访问OSX默认设置的方法?

4 投票
1 回答
1978 浏览
提问于 2025-04-16 12:03

最近,我开始喜欢把测试脚本用到的各种设置存储在OSX的defaults系统里。这样做的好处是,我可以把各种脚本放在git上,并推送到github,而不用担心把密码、设置等硬编码到脚本里。

在写shell脚本时,使用简单的bash命令很容易就能用反引号调用defaults命令来读取设置。如果读取设置时出错,脚本会停止执行,你可以看到错误信息并进行修复。不过,当我尝试在Python或Ruby中做类似的事情时,就会有点麻烦,因为你需要额外的工作来检查defaults的返回代码,以确认是否出错。

我一直在谷歌上搜索可以使用OSX defaults系统的库,但这有点困难,因为“defaults”这个词在我的搜索中出现了。

我想过直接读取plist文件,但我发现的plist库(比如Python自带的那个)只能读取XML格式的文件,而不能读取二进制格式的文件。如果我用defaults程序设置了什么,这就成了个问题,因为它会把文件转换回二进制plist。

最近,我在搜索Python库时,改变了搜索词,试着用类似NSUserDefaults的词(我现在忘了具体的词)找到了一个叫userdefaults的Python库,但这个库是为旧版OSX(10.2)和旧版Python(2.3)开发的,我在OSX 10.6和Python 2.6上编译它时没什么运气。

理想情况下,我希望找到一个库,可以像下面的Python伪代码那样,轻松地从OSX defaults系统读取(顺便说一下,还能写入)。

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

因为我也开始更多地使用Ruby,所以我也想找一个功能类似的Ruby库。

也许最终我得“放弃”,自己写一个简单的库来围绕defaults命令,但我觉得询问一下别人,看看是否有现成的解决方案也没坏处。

1 个回答

3

你可以使用 PyObjC,看看 mactech.com 上的这篇文章(特别是:往下滚动到“通过 Python 访问 plist”)。还有 这篇来自 oreilly 的关于 PyObjC 的文章

例如,运行这个:

from Foundation import *
standardUserDefaults = NSUserDefaults.standardUserDefaults()
persistentDomains = standardUserDefaults.persistentDomainNames()
persistentDomains.objectAtIndex_(14)
aDomain = standardUserDefaults.persistentDomainForName_(persistentDomains[14])
aDomain.keys()

撰写回答