2012-06-16 11 views
6

Chcę móc wywoływać niektóre metody i takie, które są zawarte w jar JAR, który jest już uruchomiony (Jest gwarantowane, że będzie działać). Znalazłem takie rzeczy jak Jython, ale wydaje się, że tylko one mają dostęp do rodzimych klas Java i tym podobnych.Wywołanie nienatywnego kodu Java z Python

+0

Jak można oczekiwać, aby być w stanie to zrobić z np Java? –

Odpowiedz

3

Sprawdź to. Calling Java from Python

"Można także użyć Py4J Jest to przykład na stronie głównej i mnóstwo dokumentacji, ale w zasadzie, po prostu zadzwonić do metod Java z kodem Pythona, jak gdyby metody były pytona:

from py4j.java_gateway import JavaGateway 

bramy = JavaGatew Ay() # podłączyć do JVM

java_object = gateway.jvm.mypackage.MyClass() # Invoke konstruktor

other_object = java_object.doThat()

other_object.doThis (1 'abc')

gateway.jvm.java.lang.System.out.println ('Hello World!') # wywołanie metody statycznej

W przeciwieństwie do Jython, jedna część Py4J działa w VM Pythona, więc jest zawsze "aktualna" z najnowszą wersją Pythona i można używać bibliotek, które nie działają dobrze w Jythonie (np. Lxml). Druga część działa na maszynie wirtualnej Java, którą chcesz wywołać.

Komunikacja odbywa się za pośrednictwem gniazd zamiast JNI i Py4J ma swój własny protokół (do optymalizacji niektórych przypadków, do zarządzania pamięcią, itd.) "

+2

Ze strony Py4J: "Zauważ, że program Java musi zostać uruchomiony przed wykonaniem powyższego kodu Pythona. Innymi słowy, Py4J nie uruchamia JVM. "---- Przejdź do ich strony internetowej: http://py4j.sourceforge.net/index.html – tabchas