¿Podemos llamar a un método de Python desde Java?

Sé que jython nos permite llamar a un método java desde cualquier archivo de clase de java como si estuvieran escritos para python, pero ¿es posible lo contrario?

Ya tengo tantos algoritmos que están escritos en python, funcionan bastante bien con python y jython, pero carecen de una GUI adecuada. Estoy planeando traer la GUI con el java y mantener la biblioteca de python intacta. No puedo escribir una buena GUI con jython o python y no puedo escribir un buen algoritmo con python. Así que la solución que encontré fue fusionar la GUI de java y la biblioteca de python. Es posible. ¿Puedo llamar a la biblioteca de python desde java.

Sí, eso se puede hacer. Normalmente esto se hará creando un objeto PythonInterpreter y luego llamando a la clase python usando eso.

Considere el siguiente ejemplo:

Java:

 import org.python.core.PyInstance; import org.python.util.PythonInterpreter; public class InterpreterExample { PythonInterpreter interpreter = null; public InterpreterExample() { PythonInterpreter.initialize(System.getProperties(), System.getProperties(), new String[0]); this.interpreter = new PythonInterpreter(); } void execfile( final String fileName ) { this.interpreter.execfile(fileName); } PyInstance createClass( final String className, final String opts ) { return (PyInstance) this.interpreter.eval(className + "(" + opts + ")"); } public static void main( String gargs[] ) { InterpreterExample ie = new InterpreterExample(); ie.execfile("hello.py"); PyInstance hello = ie.createClass("Hello", "None"); hello.invoke("run"); } } 

Python:

 class Hello: __gui = None def __init__(self, gui): self.__gui = gui def run(self): print 'Hello world!' 

Puede llamar fácilmente a las funciones de Python desde el código Java con Jython. Eso es siempre y cuando su propio código de Python se ejecute bajo jython, es decir, no use algunas extensiones C que no sean compatibles.

Si eso funciona para usted, es sin duda la solución más sencilla que puede obtener. De lo contrario, puede usar org.python.util.PythonInterpreter del nuevo soporte de intérprete de Java6.

Un ejemplo simple de la parte superior de mi cabeza, pero debería funcionar, espero: (no se realiza una comprobación de errores por brevedad)

 PythonInterpreter interpreter = new PythonInterpreter(); interpreter.exec("import sys\nsys.path.append('pathToModiles if they're not there by default')\nimport yourModule"); // execute a function that takes a string and returns a string PyObject someFunc = interpreter.get("funcName"); PyObject result = someFunc.__call__(new PyString("Test!")); String realResult = (String) result.__tojava__(String.class); 

src ¿ Llamando a Python en Java?