Документация Python неофициальный перевод

38. Модули MacPython OSAMacPython OSA Modules

В этой главе описывается текущая реализация Open Scripting Architecture (OSA, также часто называемой AppleScript) для Python, позволяющая управлять скриптуемыми приложениями из программы на Python с довольно pythonic-интерфейсом. Разработка этого набора модулей прекращена.

Для описания различных компонентов AppleScript и OSA, а также для понимания архитектуры и терминологии, следует прочитать документацию Apple. «Руководство по языку AppleScript» объясняет концептуальную модель и терминологию, а также документирует стандартный набор команд. Документ «Open Scripting Architecture» объясняет, как использовать OSA с точки зрения программиста приложений. В Apple Help Viewer эти книги находятся в разделе «Документация разработчика», подраздел «Core Technologies».

В качестве примера скриптования приложения следующий фрагмент 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, взаимодействующий с терминологией приложения (то, что Script Editor называет «Словарём»). Это можно сделать из среды PythonIDE или запустив модуль gensuitemodule.py как отдельную программу из командной строки.

Сгенерированный вывод представляет собой пакет с несколькими модулями: по одному на каждый набор команд, используемых в программе, плюс модуль __init__ для склеивания всего вместе. Граф наследования Python следует графу наследования AppleScript, поэтому если словарь программы указывает, что он включает поддержку стандартного набора, но расширяет один-два глагола дополнительными аргументами, то выходной набор будет содержать модуль Standard_Suite, который импортирует и реэкспортирует всё из StdSuites.Standard_Suite, но переопределяет методы с дополнительной функциональностью. Вывод gensuitemodule довольно читаем и содержит документацию из оригинального словаря AppleScript в виде строк документации Python, так что его чтение является хорошим источником документации.

Выходной пакет реализует главный класс с тем же именем, что и пакет, который содержит все глаголы AppleScript в виде методов, с прямым объектом в качестве первого аргумента и всеми необязательными параметрами в качестве именованных аргументов. Классы AppleScript также реализованы как классы Python, как и сравнения и все прочие вещи.

Главный класс Python, реализующий глаголы, также предоставляет доступ к свойствам и элементам, объявленным в классе AppleScript «application». В текущем выпуске объектная ориентация доходит только до этого, поэтому в приведённом выше примере необходимо использовать f.get(f.window(1).name) вместо более pythonic-варианта f.window(1).name.get().

Если идентификатор AppleScript не является допустимым идентификатором Python, имя искажается в соответствии с несколькими правилами:

  • пробелы заменяются на знаки подчёркивания

  • другие не буквенно-цифровые символы заменяются на _xx_, где xx – шестнадцатеричное значение символа

  • к любому зарезервированному слову Python добавляется знак подчёркивания

Python также поддерживает создание скриптуемых приложений на Python, но следующие модули относятся к поддержке AppleScript в MacPython:

Кроме того, вспомогательные модули были предварительно сгенерированы для Finder, Terminal, Explorer, Netscape, CodeWarrior, SystemEvents и StdSuites.