Llamar al script de Python desde el código de Java

Sheeraz Gul 12 octubre 2023
Llamar al script de Python desde el código de Java

Este tutorial demuestra tres enfoques diferentes para llamar scripts de Python desde código Java.

Llamar al script de Python desde el código de Java

A veces, debemos llamar a los scripts de Python desde nuestro código Java para cumplir con los requisitos del proyecto. Podemos hacerlo usando Process, ProcessBuilder y Jython. Veamos cómo podemos usar cada uno de ellos a continuación.

Use la clase Proceso para ejecutar Python Script desde código Java

Podemos usar la clase Process de Java para ejecutar scripts de Python desde nuestro código Java. Intentemos crear un script de Python y ejecutarlo con código Java. Siga los pasos a continuación:

  1. Copie su secuencia de comandos de Python en una cadena en Java.
  2. Cree un archivo con la extensión .py utilizando BufferedWriter.
  3. Escriba el contenido de la cadena anterior en el archivo de Python y cierre el escritor.
  4. Cree un proceso para ejecutar el archivo Python usando Runtime.getRuntime().exec().
  5. Lea los datos del proceso usando BufferedReader.
  6. Use o imprima los datos recuperados al ejecutar el código de Python.

Ahora implementemos los pasos anteriores en código Java:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStreamReader;

public class Example {
  public static void main(String a[]) {
    try {
      String Python_Script = "print(\"Hello, This is Delftstack.com!The Best Tutorial Site!\")\n";

      BufferedWriter Buffered_Writer = new BufferedWriter(new FileWriter("DemoPythonFile.py"));
      Buffered_Writer.write(Python_Script);
      Buffered_Writer.close();

      Process Demo_Process = Runtime.getRuntime().exec("python DemoPythonFile.py");

      BufferedReader Buffered_Reader =
          new BufferedReader(new InputStreamReader(Demo_Process.getInputStream()));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

El código anterior intenta crear y ejecutar un script de Python en Java y escribe la siguiente cadena en el archivo DemoPythonFile.py.

Hello, This is Delftstack.com!The Best Tutorial Site!

Debemos mencionar que no es necesario crear un script de Python y luego ejecutarlo; también puede cargar directamente su secuencia de comandos Python y su salida en código Java.

Tenga en cuenta que puede recibir una advertencia sobre la obsolescencia de la función Runtime.getRuntime().exec(), lo que significa que Java puede eliminar esta función en versiones futuras.

Use la clase ProcessBuilder para ejecutar Python Script desde código Java

La clase ProcessBuilder en Java se utiliza para crear un proceso del sistema operativo. También podemos usar esta clase para ejecutar scripts de Python en Java.

Siga los pasos para ejecutar scripts de Python en Java utilizando la clase ProcessBuilder:

  1. Asegúrese de que Python esté instalado en su sistema.
  2. Cree un script de Python con la extensión .py o seleccione uno si ya tiene uno.
  3. Cree una instancia de la clase ProcessBuilder y pase python y la ruta del script como parámetros.
  4. Cree un proceso para ejecutar el ProcessBuilder utilizando el método start(); esto ejecutará el script de Python.
  5. Cree un BufferedReader para obtener la salida del script de Python del proceso.
  6. Imprima la salida.

Implementemos el ejemplo en Java. Nuestro script Python es:

print("Hello, This is Delftstack.com! The Best Tutorial Site!")

Aquí está la implementación de Java:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Example {
  public static void main(String[] args) throws IOException, InterruptedException {
    String Script_Path = "C:\\Users\\Sheeraz\\script.py";
    ProcessBuilder Process_Builder = new ProcessBuilder("python", Script_Path).inheritIO();

    Process Demo_Process = Process_Builder.start();
    Demo_Process.waitFor();

    BufferedReader Buffered_Reader =
        new BufferedReader(new InputStreamReader(Demo_Process.getInputStream()));
    String Output_line = "";

    while ((Output_line = Buffered_Reader.readLine()) != null) {
      System.out.println(Output_line);
    }
  }
}

El código anterior ejecutará el script de Python dado usando Java y lo imprimirá en la consola. Ver salida:

Hello, This is Delftstack.com! The Best Tutorial Site!

Use Jython para ejecutar código Python y Java juntos

El Jython es un proyecto para proporcionar la implementación de secuencias de comandos Python en código Java. Jython ejecuta el código Python y Java entre sí.

Para usar Jython en Java, solo necesitamos descargar el Jython-standalone-2.7.2.jar o cualquier versión más reciente y agregarlo a la ruta de compilación de su proyecto. Siga los pasos a continuación para agregar Jython a su entorno Java:

  1. Descarga Jython Standalone desde aquí.
  2. Agregue el Jython-standalone-2.7.2.jar a su ruta de compilación.
  3. Vaya al proyecto Propiedades -> Java Build Path.
  4. Agregue Jar externo a su ruta de clase.
  5. Seleccione Jython-standalone-2.7.2.jar y haga clic en Aplicar y cerrar.

Una vez que el Jython está incluido en nuestro entorno Java, ahora podemos ejecutar scripts de Python en Java. La clase PythonInterpreter es de Jython para ejecutar scripts y operaciones de Python.

Aquí están los diferentes métodos de Jython para ejecutar Python en Java:

Método Descripción
setIn(PyObject) Se utiliza para configurar un objeto de Python para el flujo de entrada estándar.
setIn(java.io.Reader) Se utiliza para configurar un Java IO Reader para el flujo de entrada estándar.
setIn(java.io.InputStream) Se utiliza para establecer un InputStream de E/S de Java para el flujo de entrada estándar.
setOut(PyObject) Se utiliza para configurar un objeto de Python para el flujo de salida estándar.
setOut(java.io.Writer) Se utiliza para configurar un escritor Java IO para el flujo de salida estándar.
setOut(java,io.OutputStream) Se utiliza para establecer un OutputStream de E/S de Java para el flujo de salida estándar.
setErr(java.io.Writer) Se utiliza para establecer un escritor de E/S de Java para el flujo de error estándar.
setErr(PyObject) Se utiliza para configurar un objeto de Python para el flujo de error estándar.
setErr(java.io.OutputStream) Se utiliza para establecer un OutputStream de E/S de Java para el flujo de error estándar.
eval(String) Se utiliza para evaluar una cadena de Python para Java.
eval(PyObject) Se utiliza para evaluar un objeto de Python para Java.
exec(String) Se utiliza para ejecutar una cadena de Python en el espacio de nombres local.
exec(PyObject) Se utiliza para ejecutar un objeto de Python en el espacio de nombres local.
execfile (nombre de archivo de cadena) Se utiliza para ejecutar un archivo de Python en el espacio de nombres local.
execfile(java.io.InputStream) Se utiliza para ejecutar Python InputStream en el espacio de nombres local.
compile(String) Se utiliza para compilar una cadena de Python como un módulo de expresión.
compilar (script, nombre de archivo) Se utiliza para compilar un script de Python como un módulo de expresión.
establecer (nombre de la cadena, valor del objeto) Se utiliza para establecer una variable de tipo objeto.
establecer (nombre de cadena, valor de PyObject) Se utiliza para establecer una variable de tipo PyObject.
get(String) Se utiliza para obtener el valor de una variable.
get(String nombre, Classjavaclass) Se utiliza para obtener el valor de una variable y devolverlo como instancia de una clase Java dada.

Ahora, conocemos los métodos de los proyectos Jython. Intentemos usar algunos de ellos en nuestro ejemplo: El archivo script.py:

print("Hello, This is Delftstack.com! The Best Tutorial Site!, Message from Python")

La implementación de Jython:

import org.python.core.*;
import org.python.util.PythonInterpreter;

public class Example {
  public static void main(String[] args) throws PyException {
    PythonInterpreter Python_Interpreter = new PythonInterpreter();
    System.out.println("Hello, This is Delftstack.com! The Best Tutorial Site!, Message from Java");

    // Run a Python file
    Python_Interpreter.execfile("C:\\Users\\Sheeraz\\script.py");

    //  Run Different Python operations
    // Set a variable and print it using Python in java
    Python_Interpreter.set("x", new PyInteger(100));
    Python_Interpreter.exec("print x");

    // Execute a sum
    Python_Interpreter.exec("y = 25+45");
    PyObject y = Python_Interpreter.get("y");
    System.out.println("y: " + y);
  }
}

El código anterior ejecutará una secuencia de comandos de Python desde un archivo y ejecutará algunas operaciones de Python utilizando los métodos de la tabla anterior. Ver salida:

Hello, This is Delftstack.com! The Best Tutorial Site!, Message from Java
Hello, This is Delftstack.com! The Best Tutorial Site!, Message from Python
100
y: 70
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook