在Appscript中同时获取多个属性

时间:2009-10-13 02:09:27

标签: python macos applescript appscript

我正在使用Appscript - AppleScript的Python界面 - 在我的一个项目中,基本上从a Mac application获取数据。

以下是示例代码:

    asobj = app('Things').to_dos()[0]
    self.id = asobj.id()
    self.name = asobj.name()
    self.status = asobj.status()

每次调用属性(id,name,status)都会进行进程间调用,因此速度很慢..尤其是对数千个对象执行相同操作时。

有没有办法通过AppleScript的Python界面(appscript)同时获取多个属性?

2 个答案:

答案 0 :(得分:3)

我不是100%确定如何在Python中表达它,但是大多数Applescript对象都支持“properties”属性,该属性将返回包含该对象的每个受支持属性的键/值对的字典。我猜测调用asobj.properties()将返回一个合适的数据结构,然后您可以从中检索所需的任何单个属性。

答案 1 :(得分:0)

如果您拥有大量元素,那么抓住您的属性会更快:

ref = app('Things').to_dos
ids = ref.id()
names = ref.name()
statuses = ref.status()

然后使用Python的zip()函数根据需要重新排列它们。 appscript文档有一章关于优化技术,可以更详细地解释这一点。

如果您还没有这样做,您还应该从appscript网站获取ASDictionary和ASTranslate工具的副本。 ASTranslate将帮助您将应用程序命令从AppleScript转换为appscript语法。 ASDictionary将以appscript样式格式导出应用程序字典,并启用appscript的内置help()方法,允许您以交互方式探索应用程序字典(比dir()强大得多)。