2012-07-09 233 views
2

這可能是一個模糊的問題,但我沒有正確地重述它。所以這裏有一個解釋。如何在python和mac應用程序之間進行通信?

我開發了一個最初作爲Mac應用程序開發的應用程序,使用來自Carbon/Cocoa的API來實現我的任務。 (該應用程序的目標是在鼠標移動/其他擊鍵後向應用程序發送'擊鍵',我使用Accessibility API)。

但是現在,我想添加腳本支持,因此可以有條件的擊鍵。如:按下'Y'五次後,我想按'B'按鈕。

在OSX中,Python應用程序不可能做這樣的事情,而且我找不到任何允許我這樣做的庫。所以我想我會讓應用程序翻兩番。首先:我將在Cocoa/Carbon中編寫一個應用程序,其基本功能爲:SendKeyToApp(pid,key)和WaitForMovement()。

python應用程序將使用這些方法調用與該應用程序進行通信。這裏的問題是:我如何在這兩個應用程序之間進行通信?我會使用HTTP服務器,一個Socket服務器,某種subprocess.Popen()黑客。我坦率地不知道。

有沒有人有任何想法來實現這樣的任務?

回答

1

更容易。我在Python中使用了Accessibility API,這一切都讓我可以在沒有任何Cocoa/Carbon的情況下輕鬆做到這一點。

有興趣的那些,這就是所謂的atomac.

0

有許多方法來同步/兩個應用程序之間傳送數據,但讓我解釋一下簡單:

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

0

在我看來,在兩個應用程序之間建立通信的最簡單方法是客戶機 - 服務器協議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

0

PyObjC也許是你'尋找:

PyObjC(發音爲pie-obz-see)是可以在Python中編寫Cocoa應用程序的關鍵部分。它使Python對象能夠向Objective-C對象發送消息,就好像它們是Python對象一樣,並且同樣便於Objective-C對象以同樣的方式向Python對象發送消息。

你可以使用PyObjC在你的python應用程序和你的可可應用程序之間建立一個橋樑。

0

,許多原生應用程序支持AppleScript的(又名OSA)作爲他們的母語腳本API。因此,你的問題就變成了Python和Applescript之間的交互問題(並且首先解決了如何在AppleScript中與目標應用程序交談)。

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

相關問題