Одним из эффективных способов достижения этого является использование архитектуры процессов передачи сообщений / коммуникации, позволяющей вам достичь своей цели с помощью Python, но не ограничивающей себя Python.
------------------------------------
| App <--> Ext. API <--> Protocol | <--> (Socket) <--> API.py <--> Script
------------------------------------
Эта диаграмма пытаетсяпокажите следующее: Ваше приложение связывается с внешними процессами (например, Python) с помощью передачи сообщений.Это эффективно на локальной машине и может быть переносимым, потому что вы определяете свой собственный протокол .Единственное, что вы должны дать своим пользователям, - это библиотека Python, которая реализует ваш пользовательский API и взаимодействует с помощью цикла связи Send-Receive между сценарием вашего пользователя и вашим приложением.
Определение внешнего API вашего приложения
Внешний API вашего приложения описывает все функции, с которыми должен взаимодействовать внешний процесс.Например, если вы хотите, чтобы ваш скрипт Python мог рисовать красный круг в вашем приложении, ваш внешний API может включать в себя Draw (Object, Color, Position).
Определение протокола связи
Это протокол, который внешние процессы используют для связи с вашим приложением через его внешний API.Популярные варианты для этого могут быть XML-RPC, SunRPC, JSON или ваш собственный протокол и формат данных.Выбор здесь должен быть достаточным для вашего API.Например, если вы собираетесь передавать двоичные данные, тогда JSON может потребовать кодирование base64, а SunRPC предполагает двоичную связь.
Создание системы обмена сообщениями вашего приложения
Это так же просто, как бесконечный циклполучать сообщения по протоколу связи, обслуживать запрос в приложении и отвечать по одному и тому же сокету / каналу.Например, если вы выбрали JSON, вы получите сообщение, содержащее инструкции для выполнения Draw (Object, Color, Position).После выполнения запроса вы ответите на него.
Создание библиотеки сообщений для Python (или чего-либо еще)
Это еще проще.Опять же, это цикл отправки и получения сообщений от имени пользователя библиотеки (т.е. ваши пользователи пишут скрипты Python).Единственное, что должна сделать эта библиотека, - это обеспечить программный интерфейс для внешнего API вашего приложения и преобразовать запросы в протокол связи, скрытый от ваших пользователей.
Использование сокетов Unix, например, будет чрезвычайно быстрым.
Поиск плагинов / приложений
Распространенной практикой для обнаружения плагинов приложений является указание «хорошо известного» каталога, в котором должны быть размещены плагины.Это может быть, например:
~/.myapp/plugins
Следующим шагом для вашего приложения является поиск в этом каталоге существующих плагинов.В вашем приложении должно быть несколько смартов, чтобы можно было различать скрипты Python, которые являются реальными скриптами для вашего приложения, а не являются такими.
Предположим, что ваш коммуникационный протокол указывает, что каждый скрипт будет взаимодействовать с использованием JSON через StdInput/ StdOuput.Простой и эффективный подход - указать в протоколе, что при первом запуске сценария он отправляет MAGIC_ID в стандартный формат.То есть ваше приложение считывает первые, скажем, 8 байтов и ищет конкретное 64-битное значение, которое идентифицирует его как сценарий.
Кроме того, вы должны включить в методы внешнего API, которые позволяют ваши сценарииидентифицировать себя.Например, сценарий должен иметь возможность информировать приложение через такие внешние API, как Имя , Описание , Возможности , Ожидания , по существу информируя приложение, что это такое и что оно будет делать.