2012-06-16 23 views
6

Quiero poder llamar a ciertos métodos y tales que están contenidos en un jar de Java que ya se está ejecutando (se garantiza que se ejecutará). He encontrado cosas como Jython, pero parece que solo pueden acceder a las clases nativas de Java y cosas por el estilo.Llamar código Java no nativo de Python

+0

¿Cómo esperas que ser capaz de hacer esto de ejemplo Java? –

Respuesta

3

Salida esto:. Calling Java from Python

"También es posible usar Py4J Hay un ejemplo en la página principal y un montón de documentación, pero en esencia, que acaba de llamar a métodos Java desde el código Python como si eran métodos Python:

from py4j.java_gateway import JavaGateway 

gateway = JavaGatew ay() # conectarse a la JVM

java_object = gateway.jvm.mypackage.MyClass() # de invocación del constructor

other_object = java_object.doThat()

other_object.doThis (1, 'abc')

gateway.jvm.java.lang.System.out.println ('Hello World!') # llamada a un método estático

A diferencia de Jython, una parte de Py4J se ejecuta en la máquina virtual de Python, por lo que siempre está "actualizada" con la última versión de Python y puede usar bibliotecas que no funcionan bien en Jython (por ejemplo, lxml). La otra parte se ejecuta en la máquina virtual Java a la que desea llamar.

La comunicación se realiza a través de sockets en lugar de JNI y Py4J tiene su propio protocolo (para optimizar ciertos casos, para la gestión de memoria, etc.) "

+2

Desde el sitio web Py4J: "Tenga en cuenta que el programa Java debe iniciarse antes de ejecutar el código Python anterior. En otras palabras, Py4J no inicia una JVM. "---- Vaya a su sitio web en: http://py4j.sourceforge.net/index.html – tabchas

Cuestiones relacionadas