我正在构建一个 Objective-C mac 应用程序。我希望该应用程序能够启动并与同一个正在运行的 python 进程持续通信。
例如,基本流程可能是:
- 应用程序启动,我在后台启动一个python进程
- 应用导入一些库并在python进程中初始化一些变量
- 用户做了一些事情,我使用初始化的变量在这个 python 进程上运行一些 python 代码,并在我的 mac 应用程序中使用 python 表达式的结果
我可以使用哪些技术来完成此任务?任何指导都会非常有帮助。
我正在构建一个 Objective-C mac 应用程序。我希望该应用程序能够启动并与同一个正在运行的 python 进程持续通信。
例如,基本流程可能是:
我可以使用哪些技术来完成此任务?任何指导都会非常有帮助。
一种可能的解决方案是通过 Python 进程运行模拟 Web 服务。定义您自己的接口(很可能是 RESTful API)供您的 Objective-C 应用程序访问。也许它在性能上会有点贵 - 这取决于您实际任务的复杂性以及您想要在两个进程之间传输的数据量。
例如,在 Python 进程中,在 8080 端口上运行一个标准的 HTTP 服务,一直在监听。然后 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 响应中返回结果。
顺便说一句,也许您可以考虑在 Obj-C 应用程序中直接通过C 接口调用 Python 方法,而不是在单独的进程中运行 Python 脚本。
在我看来,在两个应用程序之间建立通信的最简单方法是客户端-服务器协议XMLRPC。Cocoa和Python都支持它。
Python 部分相当简单:
import xmlrpc.client
rpcProxy = xmlrpc.client.ServerProxy(URL_OF_SERVER)
rpcProxy.doJobInMacApp(arg1, arg2)
至于 Objective-C 部分,我不知道,但似乎有可能:XML-RPC Server in Cocoa或Best way to use XML-RPC in Cocoa application?