2012-06-16 4 views
6

すでに実行中のJava jarに含まれている特定のメソッドなどを呼び出せます(実行されることが保証されています)。私はJythonのようなものを見つけましたが、それらはJavaのネイティブクラスなどにアクセスできるようにしか見えません。Pythonの非ネイティブJavaコードを呼び出す

+0

どのようにあなたが例えばからこれを行うことができることを期待していませんJava? –

答えて

3

チェックアウトこの:Calling Java from Python

ます。また、フロントページやドキュメントの多くの例がありPy4Jを使用することができますが、基本的に、あなたは自分のPythonコードからJavaメソッドをコールするかのように、彼らたPythonの方法:

from py4j.java_gateway import JavaGateway 

ゲートウェイ= JavaGatew AY()#JVM

JAVA_OBJECT = gateway.jvm.mypackage.MyClass()#の呼び出しのコンストラクタに接続

other_object = java_object.doThat()

other_object.doThis(1、 'ABC' )

gateway.jvm.java.lang.System.out.println( 'Hello Worldの!')#呼び出し静的メソッド

Jythonとは対照的に、Py4Jの一部はPython VMで動作するため、Pythonの最新バージョンでは常に最新の状態にあり、Jythonでうまく動作しないライブラリ(lxmlなど)を使用できます。他の部分は、呼び出したいJava VMで実行されます。

通信ではなくJNIのソケットを介して行われ、Py4Jは、独自のプロトコルを(など、メモリを管理するために、特定のケースを最適化するために)持っている

+2

Py4J Webサイトから: "上記のPythonコードを実行する前にJavaプログラムを起動する必要があることに注意してください。言い換えれば、Py4JはJVMを起動しません。 "---- http://p4j.sourceforge.net/index.htmlのWebサイトにアクセスしてください。 – tabchas