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

如何从Objective-C应用程序与正在运行的python进程通信?,python,objective-c,Python,Objective C,我正在开发Objective-C mac应用程序。我希望该应用程序能够启动同一个正在运行的python进程并与之持续通信 例如,基本流程可能是: 应用程序启动时,我在后台启动一个python进程 该应用程序在python过程中导入一些库并初始化一些变量 用户执行某些操作时,我使用初始化的变量在此python进程上运行一些python代码,并在我的mac应用程序中使用python表达式的结果 我可以使用什么技术来实现这一点?任何指导都会非常有用。一个可能的解决方案是通过Python进程运行模拟we

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

例如,基本流程可能是:

  • 应用程序启动时,我在后台启动一个python进程
  • 该应用程序在python过程中导入一些库并初始化一些变量
  • 用户执行某些操作时,我使用初始化的变量在此python进程上运行一些python代码,并在我的mac应用程序中使用python表达式的结果

  • 我可以使用什么技术来实现这一点?任何指导都会非常有用。

    一个可能的解决方案是通过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应用程序中调用Python方法,而不是在一个分离的过程中运行Python脚本。在我看来,在两个应用程序之间建立通信的最简单的方法是客户机-服务器协议<强> XMLRPC < /强>。两者都支持

    Python部分相当简单:

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

    至于Objective-C-part,我不知道,但它似乎是可能的:或者

    这听起来是一个不错的方法,可能最终会成为我的方式,但我希望在运行的流程之间有一种更简单的沟通方式。如果没有更好的建议,我会接受这个答案。