> **Источник:** https://python-all.ru/2.7/library/macosa.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 38. Модули MacPython OSA

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

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

В качестве примера скриптования приложения следующий фрагмент AppleScript получит имя самого верхнего окна **Finder** и выведет его:

```python
tell application "Finder"
    get name of window 1
end tell
```

На Python следующий фрагмент кода сделает то же самое:

```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`](https://python-all.ru/2.7/library/gensuitemodule.html#module-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` – Генерация пакетов-заглушек OSA](https://python-all.ru/2.7/library/gensuitemodule.html)
- [38.2. `aetools` – Поддержка клиента OSA](https://python-all.ru/2.7/library/aetools.html)
- [38.3. `aepack` – Преобразование между переменными Python и контейнерами данных AppleEvent](https://python-all.ru/2.7/library/aepack.html)
- [38.4. `aetypes` – Объекты AppleEvent](https://python-all.ru/2.7/library/aetypes.html)
- [38.5. `MiniAEFrame` – поддержка сервера Open Scripting Architecture](https://python-all.ru/2.7/library/miniaeframe.html)

  - [38.5.1. Объекты AEServer](https://python-all.ru/2.7/library/miniaeframe.html#aeserver-objects)

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