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

问题描述:

这可能是一个模糊的问题,但我没有正确地重述它。所以这里有一个解释。如何在python和mac应用程序之间进行通信?

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

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

在OSX中,Python应用程序不可能做这样的事情,而且我找不到任何允许我这样做的库。所以我想我会让应用程序翻两番。首先:我将在Cocoa/Carbon中编写一个应用程序,其基本功能为:SendKeyToApp(pid,key)和WaitForMovement()。

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

有没有人有任何想法来实现这样的任务?

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

有兴趣的那些,这就是所谓的atomac.

有许多方法来同步/两个应用程序之间传送数据,但让我解释一下简单:

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

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

如果您有其他疑问,请在评论中告诉我。

+0

我需要它'即时'。这似乎是文件I/O会太慢?我需要在100毫秒内解决问题,因为它足够高效。 – 2012-07-09 10:08:14

+1

为什么不创建一个RAMDisk呢? http://recursivemedia.net/wordpress/?p=110 – 2012-07-09 22:33:17

+0

使用将通过本地机器或远程机器上的网络连接的HTTP GET/POST请求。在本地机器上,你可能会说1毫秒或更少,在私有本地网络上远程可能不会超过30毫秒 – 2017-11-13 01:42:34

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

Python的部分是相当简单:

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

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

+0

看起来Cocoa在为XMLRPC提供服务方面做得不好,但客户端支持似乎非常广泛。我将如何做到这一点?我需要Python将某些东西发送给Cocoa服务器,而不是其他方式。 (Python发明'命令',Cocoa执行它们)。 – 2012-07-09 10:20:22

PyObjC也许是你'寻找:

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

你可以使用PyObjC在你的python应用程序和你的可可应用程序之间建立一个桥梁。

,许多原生应用程序支持AppleScript的(又名OSA)作为他们的母语脚本API。因此,你的问题就变成了Python和Applescript之间的交互问题(并且首先解决了如何在AppleScript中与目标应用程序交谈)。

some OSA support in the Python standard library和第三方模块py-applescript你可能想看看。