38. MacPython OSA 模块

本章描述了适用于 Python 的 Open Scripting Architecture(OSA,也通常称为 AppleScript)的当前实现,它允许您使用相当不错的 pythonic 接口从 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 中完成此操作,也可以pass在命令行中将gensuitemodule.py模块作为独立程序运行来完成。

生成的输出是一个包含许多模块的程序包,该程序用于程序中使用的每个套件,再加上一个__init__模块将其粘合在一起。 Python 继承图遵循 AppleScript 继承图,因此,如果程序的字典指定它包括对 Standard Suite 的支持,但扩展一个或两个带附加参数的动词,则输出套件将包含模块Standard_Suite,该模块将导入并重新导出所有内容从StdSuites.Standard_Suite开始,但会覆盖具有额外Function的方法。 gensuitemodule的输出可读性强,并且包含原始 AppleScript 词典中使用 Python docstrings 编写的文档,因此阅读它是一个很好的文档来源。

输出包实现了一个与该包同名的主类,该包包含所有 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 支持有关:

此外,已经针对FinderTerminalExplorerNetscapeCodeWarriorSystemEventsStdSuites预先生成了支持模块。