如何从Objective-C应用程序与正在运行的python进程通信?

时间:2012-04-26 04:56:21

标签: python objective-c

我正在构建一个Objective-C mac应用程序。我希望该应用程序能够启动并持续与相同的运行python进程通信。

例如,基本流程可能是:

  1. 应用程序启动,我在后台启动python进程
  2. 应用程序导入一些库并在python进程中初始化一些变量
  3. 用户做某事,我使用初始化变量在这个python进程上运行一些python代码,并在我的mac app中使用python表达式的结果
  4. 我可以使用哪些技术来实现这一目标?任何指导都会非常有用。

2 个答案:

答案 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 CocoaPython都支持它。

Python部分非常简单:

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

关于Objective-C-part,我不知道,但似乎有可能:XML-RPC Server in CocoaBest way to use XML-RPC in Cocoa application?