Как связаться с запущенным процессом Python из приложения Objective-C?

1

Я создаю приложение Objective-C mac. Я хотел бы, чтобы это приложение могло запускать и постоянно взаимодействовать с тем же запущенным процессом python.

Например, основной поток может быть:

  1. Приложение запускается, я запускаю процесс python в фоновом режиме
  2. Приложение импортирует некоторые библиотеки и инициализирует некоторые переменные в процессе python
  3. Пользователь делает что-то, я запускаю некоторый код python в этом процессе python с использованием инициализированных переменных и использую результат выражения python в моем приложении mac

Какие методы я могу использовать для этого? Любое руководство было бы невероятно полезным.

Теги:

2 ответа

2

Возможным решением является запуск макетной веб-службы по вашему процессу Python. Определите свои собственные интерфейсы (скорее всего, API RESTful) для вашего приложения Objective-C для доступа. Возможно, это будет немного дорогим в производительности - это зависит от сложности вашей фактической задачи и объема данных, которые вы хотите передать между двумя процессами.

Например, в процессе Python запустите стандартную HTTP-службу на 8080-порте, все время слушайте. Затем приложение Obj-C отправляет запрос на localhost, что-то вроде:

http://127.0.0.1:8080/my_service/start_task
http://127.0.0.1:8080/my_service/get_progress
http://127.0.0.1:8080/my_service/get_result

и Python обрабатывает этот запрос, что-то делает и возвращает результат в ответе HTTP.

Кстати, возможно, вы могли бы рассмотреть возможность использования методов Python непосредственно с помощью интерфейса C в вашем приложении Obj-C, а не для запуска сценариев Python в отдельном процессе.

  • 0
    Это звучит как приличный подход и может в конечном итоге стать тем путем, которым я иду, но я надеюсь на более простой способ связи между запущенными процессами. Я приму этот ответ, если не будут сделаны лучшие предложения.
0

На мой взгляд, самым простым способом установления связи между двумя приложениями является клиент-серверный протокол XMLRPC. Оба Cocoa и Python поддерживают его.

Часть Python довольно проста:

import xmlrpc.client
rpcProxy = xmlrpc.client.ServerProxy(URL_OF_SERVER)
rpcProxy.doJobInMacApp(arg1, arg2)

Что касается Objective-C-части, я не знаю, но, похоже, это возможно: XML-RPC-сервер в cocoa или лучший способ использовать XML-RPC в приложении Cocoa?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню