Saltar al contenido

¿Llamar y recibir salida del script Python en Java?

Solución:

No estoy seguro de haber entendido tu pregunta correctamente, pero siempre que puedas llamar al ejecutable de Python desde la consola y solo quieras capturar su salida en Java, puedes usar el exec() método en Java Runtime clase.

Process p = Runtime.getRuntime().exec("python yourapp.py");

Puede leer sobre cómo leer realmente el resultado aquí:

http://www.devdaily.com/java/edu/pj/pj010016

También hay una biblioteca de Apache (el proyecto ejecutivo de Apache) que puede ayudarlo con esto. Puedes leer más sobre esto aquí:

http://www.devdaily.com/java/java-exec-processbuilder-process-1

http://commons.apache.org/exec/

Puede incluir la biblioteca Jython en su proyecto Java. Puede descargar el código fuente del propio proyecto Jython.

Jython ofrece soporte para JSR-223 que básicamente le permite ejecutar un script de Python desde Java.

Puedes usar un ScriptContext para configurar dónde desea enviar su salida de la ejecución.

Por ejemplo, supongamos que tiene la siguiente secuencia de comandos de Python en un archivo llamado numbers.py:

for i in range(1,10):
    print(i)

Entonces, puede ejecutarlo desde Java de la siguiente manera:

public static void main(String[] args) throws ScriptException, IOException {

    StringWriter writer = new StringWriter(); //ouput will be stored here

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptContext context = new SimpleScriptContext();

    context.setWriter(writer); //configures output redirection
    ScriptEngine engine = manager.getEngineByName("python");
    engine.eval(new FileReader("numbers.py"), context);
    System.out.println(writer.toString()); 
}

Y la salida será:

1
2
3
4
5
6
7
8
9

Siempre que su secuencia de comandos de Python sea compatible con Python 2.5, no tendrá ningún problema para ejecutar esto con Jython.

Encontré el mismo problema antes, también leí las respuestas aquí, pero no encontré ninguna solución satisfactoria que pueda equilibrar la compatibilidad, el rendimiento y la salida de formato adecuado, el Jython no puede funcionar con paquetes C extendidos y es más lento que CPython. Así que finalmente decidí inventar la rueda yo mismo, me tomó 5 noches, espero que también pueda ayudarte: jpserve (https://github.com/johnhuang-cn/jpserve).

JPserve proporciona una forma sencilla de llamar a Python e intercambiar el resultado por formato JSON, poca pérdida de rendimiento. El siguiente es el código de muestra.

Al principio, inicie jpserve en el lado de Python

>>> from jpserve.jpserve import JPServe
>>> serve = JPServe(("localhost", 8888))
>>> serve.start()

INFO:JPServe:JPServe starting...
INFO:JPServe:JPServe listening in localhost 8888

Luego llame a Python desde el lado de JAVA:

PyServeContext.init("localhost", 8888);
PyExecutor executor = PyServeContext.getExecutor();
script = "a = 2n"
    + "b = 3n"
    + "_result_ = a * b";

PyResult rs = executor.exec(script);
System.out.println("Result: " + rs.getResult());

---
Result: 6
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *