2012-04-26 32 views
1

我建立一个Objective-C的MAC应用程序。我希望该应用程序能够启动并持续与同一个正在运行的Python进程进行通信。如何与正在运行的Python进程从一个Objective-C的应用程序进行通信?

例如,基本流程可能是:

  1. 应用启动后,我开始一个python进程在后台
  2. 的应用进口一些库并初始化一些变量在Python过程
  3. 用户做一些事情,我在这个python进程上使用初始化变量运行python代码,并在我的mac应用中使用python表达式的结果

什么技术我可以用它来完成这个吗?任何指导都会非常有帮助。

回答

2

一个可能的解决方案是通过你的Python程序运行模拟Web服务。定义您自己的接口(很可能是RESTful API),供您的Objective-C应用程序访问。也许这将是在性能上有点贵 - 这取决于你的实际任务的复杂性,要​​在两个进程之间传输的数据量。

例如,在Python过程中,对8080端口运行一个标准的HTTP服务,听所有的时间。那么对象 - 应用程序发送到本地主机的请求,是这样的:

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应用程序中直接调用Python方法C interface,而不是在单独的进程中运行Python脚本。

+0

这听起来像一个体面的方法,并可能最终成为我走的路,但我希望有一个更简单的方法来在正在运行的进程之间进行通信。如果没有更好的建议,我会接受这个答案。 – oshea 2012-04-26 05:58:47

0

在我看来,在两个应用程序之间建立通信的最简单方法是客户端 - 服务器协议XMLRPC。无论CocoaPython做支持。

Python的部分是相当简单:

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

至于Objective-C的部分,我不知道,但它似乎是可能的:XML-RPC Server in CocoaBest way to use XML-RPC in Cocoa application?

相关问题