38. Модули MacPython OSA¶MacPython 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:
- 38.1.
gensuitemodule– Генерация пакетов-заглушек OSAgensuitemodule – Generate OSA stub packages - 38.2.
aetools– Поддержка клиента OSAaetools – OSA client support - 38.3.
aepack– Преобразование между переменными Python и контейнерами данных AppleEventaepack – Conversion between Python variables and AppleEvent data containers - 38.4.
aetypes– Объекты AppleEventaetypes – AppleEvent objects - 38.5.
MiniAEFrame– поддержка сервера Open Scripting ArchitectureMiniAEFrame – Open Scripting Architecture server support
Кроме того, вспомогательные модули были предварительно сгенерированы для Finder,
Terminal, Explorer, Netscape, CodeWarrior,
SystemEvents и StdSuites.