Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Python和Ruby更容易访问OSX默认系统?_Python_Ruby_Macos - Fatal编程技术网

通过Python和Ruby更容易访问OSX默认系统?

通过Python和Ruby更容易访问OSX默认系统?,python,ruby,macos,Python,Ruby,Macos,最近,我热衷于在OSX系统中存储测试脚本所用的各种设置,因为它允许我将各种脚本保存在git中,并将它们推送到github,而不用担心将密码/设置等硬编码到脚本中 当使用简单的bash命令编写shell脚本时,使用backticks调用默认二进制文件来读取首选项非常容易,如果读取首选项时出错,脚本将停止执行,您可以看到错误并修复它。当我尝试在Python或Ruby中做类似的事情时,它往往有点烦人,因为您必须做额外的工作来检查默认值的返回代码,以查看是否有错误 我一直在尝试通过google断断续续地

最近,我热衷于在OSX系统中存储测试脚本所用的各种设置,因为它允许我将各种脚本保存在git中,并将它们推送到github,而不用担心将密码/设置等硬编码到脚本中

当使用简单的bash命令编写shell脚本时,使用backticks调用默认二进制文件来读取首选项非常容易,如果读取首选项时出错,脚本将停止执行,您可以看到错误并修复它。当我尝试在Python或Ruby中做类似的事情时,它往往有点烦人,因为您必须做额外的工作来检查默认值的返回代码,以查看是否有错误

我一直在尝试通过google断断续续地搜索一个库来使用OSX默认系统,当“默认值”是查询字符串的一部分时,这就有点困难了

我曾想过尝试直接读取plist文件,但我发现的plist库(比如内置的python库)似乎只能读取XML文件(而不是二进制文件),如果我使用默认程序设置任何内容,这都是一个问题,因为它会将其转换回二进制plist

最近,在尝试对Python库进行另一次搜索时,我使用NSUserDefaults(我现在忘记了确切的术语)之类的东西将搜索词更改为Python库,我发现了一个名为的Python库,但它是为旧版本的OSX(10.2)和旧版本的Python(2.3)开发的我也没有太多的运气让它在OSX 10.6和Python 2.6上编译

理想情况下,我希望找到一个库,它能够以类似于以下python psudo代码的方式,使OSX默认系统易于读取(并作为额外的写入)

from some.library.defaults import defaults
settings = defaults('com.example.app')
print settings['setting_key']
由于我也开始更多地使用Ruby,我还想找到一个具有类似功能的Ruby库


可能我最终不得不“放弃”并围绕默认二进制编写自己的简单库,但我认为尝试查询其他人以查看是否存在现有的解决方案不会有什么坏处。

您需要使用PyObjC:have-look(具体来说:向下滚动到“通过Python访问plists”)。在PyObjC上。 运行以下命令,例如:

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

谢谢,看起来很有希望。这个周末我需要测试一下。