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:
- Copie su secuencia de comandos de Python en una cadena en Java.
- Cree un archivo con la extensión
.py
utilizandoBufferedWriter
. - Escriba el contenido de la cadena anterior en el archivo de Python y cierre el escritor.
- Cree un proceso para ejecutar el archivo Python usando
Runtime.getRuntime().exec()
. - Lea los datos del proceso usando
BufferedReader
. - 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
:
- Asegúrese de que Python esté instalado en su sistema.
- Cree un script de Python con la extensión
.py
o seleccione uno si ya tiene uno. - Cree una instancia de la clase
ProcessBuilder
y pasepython
y la ruta del script como parámetros. - Cree un proceso para ejecutar el
ProcessBuilder
utilizando el métodostart()
; esto ejecutará el script de Python. - Cree un
BufferedReader
para obtener la salida del script de Python del proceso. - 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:
- Descarga
Jython Standalone
desde aquí. - Agregue el
Jython-standalone-2.7.2.jar
a suruta
de compilación. - Vaya al proyecto
Propiedades
->Java Build Path
. - Agregue Jar externo a su
ruta de clase
. - 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 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