MacPython OSA Модули
В этом разделе описана текущая реализация архитектуры открытого сценария (OSA, также часто называемая AppleScript) для Python, позволяющая управлять приложениями, поддерживающими сценарии, из вашей программы Python, с довольно питоническим интерфейсом. Разработка этого набора модулей прекращена.
Для описания различных компонентов AppleScript и OSA, а также для понимания архитектуры и терминологии, вам следует обратиться к документации Apple. «Руководство по языку AppleScript» объясняет концептуальную модель и терминологию, а также документирует стандартный набор. Документ «Архитектура открытого сценария» объясняет, как использовать OSA с точки зрения программиста приложений. В Apple Help Viewer эти книги находятся в разделе документации для разработчиков, раздел «Основные технологии».
В качестве примера сценария приложения, следующий фрагмент 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 «приложение». В текущей версии это всё, что касается объектно-ориентированного программирования, поэтому в приведённом выше примере нам необходимо использовать f.get(f.window(1).name) вместо более питонического f.window(1).name.get().
Если идентификатор AppleScript не является идентификатором Python, имя искажается в соответствии с небольшим числом правил:
- пробелы заменяются на подчёркивания
- другие небуквенно-цифровые символы заменяются на
_xx_, гдеxx— шестнадцатеричное значение символа - любое ключевое слово Python получает добавленное подчёркивание
Python также поддерживает создание приложений, поддерживающих сценарии, на Python, но следующие модули важны для поддержки AppleScript в MacPython:
- 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, SystemEvents и StdSuites.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/macosa.html