我正在构建一个Objective-C mac应用程序。我希望该应用程序能够启动并持续与相同的运行python进程通信。
例如,基本流程可能是:
我可以使用哪些技术来实现这一目标?任何指导都会非常有用。
答案 0 :(得分:2)
一种可能的解决方案是通过Python进程运行模拟Web服务。为您的Objective-C应用程序定义自己的接口(很可能是RESTful API)以进行访问。也许它的性能会有点贵 - 这取决于您实际任务的复杂程度以及您希望在两个流程之间传输的数据量。
例如,在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 interface调用Python方法,而不是在单独的进程中运行Python脚本。
答案 1 :(得分:0)
在我看来,在两个应用程序之间建立通信的最简单方法是客户端 - 服务器协议 XMLRPC 。 Cocoa和Python都支持它。
Python部分非常简单:
import xmlrpc.client
rpcProxy = xmlrpc.client.ServerProxy(URL_OF_SERVER)
rpcProxy.doJobInMacApp(arg1, arg2)
关于Objective-C-part,我不知道,但似乎有可能:XML-RPC Server in Cocoa或Best way to use XML-RPC in Cocoa application?