38. MacPython OSA 模块 — Python 文档
38. MacPython OSA 模块
本章描述了 Python 的开放脚本架构(OSA,通常也称为 AppleScript)的当前实现,允许您从 Python 程序中控制可编写脚本的应用程序,并具有相当 Python 风格的界面。 这组模块的开发已停止。
有关 AppleScript 和 OSA 各种组件的描述,并了解架构和术语,您应该阅读 Apple 的文档。 “Applescript 语言指南”解释了概念模型和术语,并记录了标准套件。 “开放脚本架构”文档从应用程序员的角度解释了如何使用 OSA。 在 Apple 帮助查看器中,这些书籍位于开发人员文档的核心技术部分。
作为编写应用程序脚本的示例,以下 AppleScript 将获取最前面的 Finder 窗口的名称并打印它:
tell application "Finder"
get name of window 1
end tell
在 Python 中,以下代码片段将执行相同的操作:
import Finder
f = Finder.Finder()
print f.get(f.window(1).name)
分布式 Python 库包括实现标准套件的包,以及与少量常见应用程序接口的包。
要将 AppleEvents 发送到应用程序,您必须首先创建与应用程序术语( 脚本编辑器 称为“词典”)接口的 Python 包。 这可以在 PythonIDE 中完成,也可以通过从命令行将 gensuitemodule.py
模块作为独立程序运行来完成。
生成的输出是一个包含多个模块的包,一个用于程序中使用的每个套件加上一个 __init__
模块将它们粘合在一起。 Python 继承图遵循 AppleScript 继承图,因此如果程序的字典指定它包括对标准套件的支持,但使用额外的参数扩展一两个动词,那么输出套件将包含一个模块 Standard_Suite
导入并从 StdSuites.Standard_Suite
重新导出所有内容,但会覆盖具有额外功能的方法。 gensuitemodule 的输出非常易读,并且包含 Python 文档字符串中原始 AppleScript 字典中的文档,因此阅读它是一个很好的文档来源。
输出包实现了一个与包同名的主类,其中包含所有 AppleScript 动词作为方法,直接对象作为第一个参数,所有可选参数作为关键字参数。 AppleScript 类也被实现为 Python 类,比较和所有其他东西也是如此。
实现动词的主要 Python 类还允许访问在 AppleScript 类“应用程序”中声明的属性和元素。 在当前版本中,就对象方向而言,因此在上面的示例中,我们需要使用 f.get(f.window(1).name)
而不是更 Pythonic 的 f.window(1).name.get()
。
如果 AppleScript 标识符不是 Python 标识符,则名称会根据少量规则进行修改:
- 空格被下划线替换
- 其他非字母数字字符替换为
_xx_
,其中xx
是十六进制字符值 - 任何 Python 保留字都会附加下划线
Python 还支持在 Python 中创建可编写脚本的应用程序,但以下模块与 MacPython AppleScript 支持相关:
- 38.1.
gensuitemodule
— 生成 OSA 存根包 - 38.2.
aetools
— OSA 客户端支持 - 38.3.
aepack
— Python 变量和 AppleEvent 数据容器之间的转换 - 38.4.
aetypes
— AppleEvent 对象 - 38.5.
MiniAEFrame
— 开放脚本架构服务器支持
此外,已经为 Finder
、Terminal
、Explorer
、Netscape
、CodeWarrior
、[ X116X] 和 StdSuites
。