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

问题描述 投票:0回答:5
这可能是一个含糊的问题,但我未能正确地重新表述它。所以这里有一个解释。

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

但是现在,我想添加脚本支持,这样就可以有条件击键。如:按“Y”5次后,我想按“B”按钮。

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

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

有人有任何想法来完成这样的任务吗?

python macos ipc
5个回答
3
投票
更容易。我在 Python 中使用了 Accessibility API,这一切都让我可以轻松地做到这一点,而无需任何 Cocoa / Carbon。

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

atomac。


2
投票

PyObjC 也许就是您正在寻找的:

PyObjC(发音为pie-obz-see)是使用Python 编写Cocoa 应用程序的关键部分。它使 Python 对象能够像 Python 对象一样向 Objective-C 对象发送消息,同样也有助于 Objective-C 对象像兄弟一样向 Python 对象发送消息。

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


0
投票
有很多方法可以在两个应用程序之间同步/通信数据,但让我解释一下最简单的方法:



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

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

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


0
投票
在我看来,在两个应用程序之间建立通信的最简单方法是客户端-服务器协议

XMLRPCCocoaPython 都支持它。

Python 部分相当简单:

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

至于Cocoa部分,我不知道,但似乎是可能的:

Cocoa中的XML-RPC服务器在Cocoa应用程序中使用XML-RPC的最佳方式?


© www.soinside.com 2019 - 2024. All rights reserved.