38. MacPython OSA 模块 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/macosa
跳转至:导航、​搜索

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 支持相关:

此外,已经为 FinderTerminalExplorerNetscapeCodeWarrior、[ X116X] 和 StdSuites