3

これは漠然とした質問かもしれませんが、私はそれを正しく言い換えることができませんでした。それで、ここに説明があります。

もともとMacアプリケーションとして開発されたアプリを開発し、Carbon/Cocoaの両方のAPIを使用してタスクを実行しました。(アプリケーションの目的は、マウスの動きやその他のキーストロークの後に「キーストローク」をアプリに送信することです。そのためにアクセシビリティAPIを使用します)。

しかし今、私はスクリプトのサポートを追加したいので、条件付きのキーストロークがある可能性があります。例:「Y」を5回押した後、「B」ボタンを押したい。

OSX内では、Pythonアプリがそのようなことを行う可能性はなく、それを可能にするライブラリも見つかりません。だから私はアプリを2つ作ると思いました。最初に:SendKeyToApp(pid、key)とWaitForMovement()という基本関数を使用してCocoa/Carbonでアプリを作成します。

Pythonアプリは、これらのメソッド呼び出しを使用して、そのアプリと通信します。ここでの問題は、これら2つのアプリ間でどのように通信するかです。HTTPサーバー、ソケットサーバー、ある種のsubprocess.Popen()ハックを使用しますか。率直に言ってわかりません。

誰かがそのようなタスクを達成するためのアイデアを持っていますか?

4

5 に答える 5

3

より簡単に。Python内からAccessibilityAPIを使用しましたが、Cocoa/Carbonをまったく使用せずにこれを簡単に実行できました。

興味のある人のために、それはアトマックと呼ばれています。

于 2012-07-09T22:22:14.787 に答える
2

PyObjCはおそらくあなたが探しているものです:

PyObjC(pie-obz-seeと発音)は、PythonでCocoaアプリケーションを作成できるようにする重要な要素です。これにより、PythonオブジェクトがObjective-Cオブジェクトに他のPythonオブジェクトであるかのようにメッセージを送信できるようになり、同様に、Objective-CオブジェクトがPythonオブジェクトに兄弟としてメッセージを送信できるようになります。

PyObjCを使用して、Pythonアプリとココアアプリの間にブリッジを作成できます。

于 2012-07-09T12:45:19.443 に答える
0

2つのアプリケーション間でデータを同期/通信する方法はたくさんありますが、最も簡単な方法を説明しましょう

。RESTfulシリアル化:
オブジェクトをXML /JSONまたは両方のアプリフレームワークが解析できるその他のカスタム形式にシリアル化します。例えば。http://docs.python.org/library/json.html
両方のアプリが同じサーバー/マシン上にある場合、データを同じファイルにエンコード/保存して読み取るだけでよいと思います。 /他のアプリケーションのそれぞれのファイルからのデータを解析します。

それ以外の場合は、データファイルにアクセスするためのWebサービスを作成する必要があります。

ご不明な点がございましたら、コメントでお知らせください。

于 2012-07-09T09:32:54.560 に答える
0

私の目には、2つのアプリケーション間の通信を確立する最も簡単な方法は、クライアントサーバープロトコルXMLRPCです。CocoaPythonの両方がそれをサポートしています。

Pythonの部分はかなり単純です:

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

Cocoaの部分についてはわかりませんが、可能であるようです。CocoaのXML-RPCサーバーまたはCocoaアプリケーションでXML-RPCを使用する最良の方法は?

于 2012-07-09T09:33:13.950 に答える
0

osxでは、多くのネイティブアプリケーションがネイティブスクリプトAPIとしてAppleScript(別名OSA)をサポートしていますしたがって、あなたの質問は、PythonとApplescriptの間の相互作用の1つになります(そして、そもそもAppleScriptでターゲットアプリケーションと通信する方法を理解すること)。

Python標準ライブラリにはいくつかのOSAサポートがあり、サードパーティのモジュールpy-applescriptを確認することをお勧めします。

于 2015-09-30T04:45:38.163 に答える