我如何在python和mac应用程序之间进行通信?

时间:2012-07-09 09:07:53

标签: python macos communicate

这可能是一个模糊的问题,但我没有正确地改写它。所以这是一个解释。

我开发了一个最初作为Mac应用程序开发的应用程序,使用来自Carbon / Cocoa的API来完成我的任务。 (该应用程序的目标是在鼠标移动/其他击键后向应用程序发送“击键”。我使用Accessibility API)。

但是现在,我想添加脚本支持,因此可以有条件键击。如:按'Y'5次后,我想按下按钮'B'。

在OSX中,Python应用程序不可能做这样的事情,我找不到任何允许我这样做的库。所以我想我会把这个应用程序变成两倍。第一:我将在Cocoa / Carbon中编写一个具有基本功能的应用程序:SendKeyToApp(pid,key)和WaitForMovement()。

python应用程序将使用这些方法调用与该应用程序通信。这里的问题是:我如何在这两个应用程序之间进行通信?我会使用HTTP服务器,套接字服务器,某种subprocess.Popen()黑客攻击。坦率地说,我不知道。

有没有人有任何想法来完成这项任务?

5 个答案:

答案 0 :(得分:1)

更容易。我从Python中使用了Accessibility API,这一切都让我可以在没有任何Cocoa / Carbon的情况下轻松完成。

对于感兴趣的人,它被称为atomac.

答案 1 :(得分:0)

有两种方法可以在两个应用程序之间同步/传递数据,但让我解释一下最简单的方法:

RESTful序列化:
将对象序列化为XML / JSON或应用程序框架可以解析的任何其他自定义格式。例如。 http://docs.python.org/library/json.html
如果两个应用程序都在同一台服务器/机器上,我希望您所要做的就是将数据编码/存储到同一个文件中,并从其他应用程序中的相应文件中读取/解析数据。 / p>

否则,您可能需要创建用于访问数据文件的Web服务。

如果您有进一步的疑问,请在评论中告诉我。

答案 2 :(得分:0)

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

Python部分非常简单:

import xmlrpc.client
rpcProxy = xmlrpc.client.ServerProxy(URL_OF_SERVER)
rpcProxy.SendKeyToApp(pid,key)

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

答案 3 :(得分:0)

PyObjC也许就是你要找的东西:

  

PyObjC(发音为pie-obz-see)是可以在Python中编写Cocoa应用程序的关键部分。它使Python对象能够将Objective-C对象发送给它们,就好像它们是Python对象一样,并且同样有助于Objective-C对象以兄弟的形式向Python对象发送消息。

您可以使用PyObjC在python应用程序和cocoa应用程序之间编写一个桥梁。

答案 4 :(得分:0)

上,许多本机应用程序支持AppleScript(也就是OSA)作为其本机脚本API。因此,您的问题就变成了Python和Applescript之间的相互作用(并且首先要弄清楚如何在AppleScript中与目标应用程序进行对话)。

您可能需要查看some OSA support in the Python standard library和第三方模块py-applescript