2012-06-16 17 views
6

Desidero poter chiamare determinati metodi e tali contenuti in un jar Java già in esecuzione (è garantito che sia in esecuzione). Ho trovato cose come Jython, ma sembrano essere in grado di accedere solo alle classi native di Java e simili.Chiama codice Java non nativo da Python

+0

Come si aspetta di essere in grado di fare questo da esempio Java? –

risposta

3

Dai un'occhiata a questo:. Calling Java from Python

"Si potrebbe anche usare Py4J C'è un esempio sulla prima pagina e un sacco di documentazione, ma in sostanza, basta chiamare metodi Java dal codice python come se fossero erano metodi di pitone:

from py4j.java_gateway import JavaGateway 

gateway = JavaGatew ay() # collegare alla JVM

java_object = gateway.jvm.mypackage.MyClass() # invoke costruttore

other_object = java_object.doThat()

other_object.doThis (1, 'abc')

gateway.jvm.java.lang.System.out.println ('Ciao mondo!') # chiamata di un metodo statico

Al contrario di Jython, una parte di Py4J viene eseguita nella macchina virtuale Python, quindi è sempre "aggiornata" con l'ultima versione di Python e si possono usare librerie che non girano bene su Jython (ad esempio, lxml). L'altra parte viene eseguita nella VM Java che si desidera chiamare.

La comunicazione avviene attraverso prese invece di JNI e Py4J ha un proprio protocollo (per ottimizzare alcuni casi, di gestire la memoria, etc.) "

+2

Dal sito Web Py4J: "Si noti che il programma Java deve essere avviato prima di eseguire il codice Python sopra. In altre parole, Py4J non avvia una JVM. "---- Vai al loro sito web: http://py4j.sourceforge.net/index.html – tabchas