macosa.md
1> **Источник:** https://python-all.ru/2.7/library/macosa.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 38. Модули MacPython OSA89В этой главе описывается текущая реализация Open Scripting Architecture (OSA, также часто называемой AppleScript) для Python, позволяющая управлять скриптуемыми приложениями из программы на Python с довольно pythonic-интерфейсом. Разработка этого набора модулей прекращена.1011Для описания различных компонентов AppleScript и OSA, а также для понимания архитектуры и терминологии, следует прочитать документацию Apple. «Руководство по языку AppleScript» объясняет концептуальную модель и терминологию, а также документирует стандартный набор команд. Документ «Open Scripting Architecture» объясняет, как использовать OSA с точки зрения программиста приложений. В Apple Help Viewer эти книги находятся в разделе «Документация разработчика», подраздел «Core Technologies».1213В качестве примера скриптования приложения следующий фрагмент AppleScript получит имя самого верхнего окна **Finder** и выведет его:1415```python16tell application "Finder"17 get name of window 118end tell19```2021На Python следующий фрагмент кода сделает то же самое:2223```python24import Finder2526f = Finder.Finder()27print f.get(f.window(1).name)28```2930В дистрибутиве библиотека Python включает пакеты, реализующие стандартные наборы команд, а также пакеты для взаимодействия с небольшим числом распространённых приложений.3132Чтобы отправлять AppleEvents приложению, необходимо сначала создать пакет Python, взаимодействующий с терминологией приложения (то, что **Script Editor** называет «Словарём»). Это можно сделать из среды **PythonIDE** или запустив модуль `gensuitemodule.py` как отдельную программу из командной строки.3334Сгенерированный вывод представляет собой пакет с несколькими модулями: по одному на каждый набор команд, используемых в программе, плюс модуль `__init__` для склеивания всего вместе. Граф наследования Python следует графу наследования AppleScript, поэтому если словарь программы указывает, что он включает поддержку стандартного набора, но расширяет один-два глагола дополнительными аргументами, то выходной набор будет содержать модуль `Standard_Suite`, который импортирует и реэкспортирует всё из `StdSuites.Standard_Suite`, но переопределяет методы с дополнительной функциональностью. Вывод [`gensuitemodule`](https://python-all.ru/2.7/library/gensuitemodule.html#module-gensuitemodule) довольно читаем и содержит документацию из оригинального словаря AppleScript в виде строк документации Python, так что его чтение является хорошим источником документации.3536Выходной пакет реализует главный класс с тем же именем, что и пакет, который содержит все глаголы AppleScript в виде методов, с прямым объектом в качестве первого аргумента и всеми необязательными параметрами в качестве именованных аргументов. Классы AppleScript также реализованы как классы Python, как и сравнения и все прочие вещи.3738Главный класс Python, реализующий глаголы, также предоставляет доступ к свойствам и элементам, объявленным в классе AppleScript «application». В текущем выпуске объектная ориентация доходит только до этого, поэтому в приведённом выше примере необходимо использовать `f.get(f.window(1).name)` вместо более pythonic-варианта `f.window(1).name.get()`.3940Если идентификатор AppleScript не является допустимым идентификатором Python, имя искажается в соответствии с несколькими правилами:4142- пробелы заменяются на знаки подчёркивания43- другие не буквенно-цифровые символы заменяются на `_xx_`, где `xx` – шестнадцатеричное значение символа44- к любому зарезервированному слову Python добавляется знак подчёркивания4546Python также поддерживает создание скриптуемых приложений на Python, но следующие модули относятся к поддержке AppleScript в MacPython:4748- [38.1. `gensuitemodule` – Генерация пакетов-заглушек OSA](https://python-all.ru/2.7/library/gensuitemodule.html)49- [38.2. `aetools` – Поддержка клиента OSA](https://python-all.ru/2.7/library/aetools.html)50- [38.3. `aepack` – Преобразование между переменными Python и контейнерами данных AppleEvent](https://python-all.ru/2.7/library/aepack.html)51- [38.4. `aetypes` – Объекты AppleEvent](https://python-all.ru/2.7/library/aetypes.html)52- [38.5. `MiniAEFrame` – поддержка сервера Open Scripting Architecture](https://python-all.ru/2.7/library/miniaeframe.html)5354 - [38.5.1. Объекты AEServer](https://python-all.ru/2.7/library/miniaeframe.html#aeserver-objects)5556Кроме того, вспомогательные модули были предварительно сгенерированы для `Finder`, `Terminal`, `Explorer`, `Netscape`, `CodeWarrior`, `SystemEvents` и `StdSuites`.57