Rufen Sie Python-Skript aus Java-Code auf
Dieses Tutorial zeigt drei verschiedene Ansätze zum Aufrufen von Python-Skripts aus Java-Code.
Rufen Sie Python-Skript aus Java-Code auf
Manchmal müssen wir Python-Skripte aus unserem Java-Code aufrufen, um die Projektanforderungen zu erfüllen. Das können wir mit Process
, ProcessBuilder
und Jython
machen. Sehen wir uns unten an, wie wir jeden von ihnen verwenden können.
Verwenden Sie die Klasse Process
, um Python-Skript aus Java-Code auszuführen
Wir können die Process
-Klasse von Java verwenden, um Python-Skripte aus unserem Java-Code auszuführen. Versuchen wir, ein Python-Skript zu erstellen und es mit Java-Code auszuführen. Folgen Sie den unteren Schritten:
- Kopieren Sie Ihr Python-Skript in einen String in Java.
- Erstellen Sie mit
BufferedWriter
eine Datei mit der Endung.py
. - Schreiben Sie den Inhalt aus obigem String in die Python-Datei und schließen Sie den Writer.
- Erstellen Sie einen Prozess zum Ausführen der Python-Datei mit
Runtime.getRuntime().exec()
. - Lesen Sie die Daten aus dem Prozess mit
BufferedReader
. - Verwenden oder drucken Sie die Daten, die beim Ausführen des Python-Codes abgerufen wurden.
Lassen Sie uns nun die obigen Schritte in Java-Code implementieren:
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();
}
}
}
Der obige Code versucht, ein Python-Skript in Java zu erstellen und auszuführen und den folgenden String in die Datei DemoPythonFile.py
zu schreiben.
Hello, This is Delftstack.com!The Best Tutorial Site!
Wir sollten erwähnen, dass es nicht notwendig ist, ein Python-Skript zu erstellen und es dann auszuführen; Sie können Ihr Python-Skript und seine Ausgabe auch direkt in Java-Code laden.
Beachten Sie, dass Sie möglicherweise eine Warnung über die Ablehnung der Funktion Runtime.getRuntime().exec()
erhalten, was bedeutet, dass Java diese Funktion in zukünftigen Versionen möglicherweise entfernt.
Verwenden Sie die Klasse ProcessBuilder
, um Python-Skript aus Java-Code auszuführen
Die Klasse ProcessBuilder
in Java wird verwendet, um einen Betriebssystemprozess zu erstellen. Wir können diese Klasse auch verwenden, um Python-Skripte in Java auszuführen.
Befolgen Sie die Schritte, um Python-Skripte in Java mit der Klasse ProcessBuilder
auszuführen:
- Stellen Sie sicher, dass Python auf Ihrem System installiert ist.
- Erstellen Sie ein Python-Skript mit der Erweiterung
.py
oder wählen Sie eines aus, wenn Sie bereits eines haben. - Erstellen Sie eine Instanz der Klasse
ProcessBuilder
und übergeben Siepython
und den Skriptpfad als Parameter. - Erstellen Sie einen Prozess, um den
ProcessBuilder
mit derstart()
-Methode auszuführen; Dadurch wird das Python-Skript ausgeführt. - Erstellen Sie einen
BufferedReader
, um die Ausgabe des Python-Skripts aus dem Prozess zu erhalten. - Drucken Sie die Ausgabe.
Lassen Sie uns das Beispiel in Java implementieren. Unser Python-Skript lautet:
print("Hello, This is Delftstack.com! The Best Tutorial Site!")
Hier ist die Implementierung von 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);
}
}
}
Der obige Code führt das angegebene Python-Skript mit Java aus und gibt es auf der Konsole aus. Siehe Ausgabe:
Hello, This is Delftstack.com! The Best Tutorial Site!
Verwenden Sie Jython
, um Python- und Java-Code zusammen auszuführen
Jython
ist ein Projekt zur Implementierung von Python-Skripten in Java-Code. Jython
führt den Python- und Java-Code miteinander aus.
Um Jython
in Java zu verwenden, müssen wir nur Jython-standalone-2.7.2.jar
oder eine aktuelle Version herunterladen und zum Build-Pfad
Ihres Projekts hinzufügen. Führen Sie die folgenden Schritte aus, um Jython
zu Ihrer Java-Umgebung hinzuzufügen:
- Laden Sie
Jython Standalone
von hier herunter. - Fügen Sie die Datei
Jython-standalone-2.7.2.jar
zu IhremBuild-Pfad
hinzu. - Gehen Sie zum Projekt
Properties
->Java Build Path
. - Fügen Sie External Jar zu Ihrem
Klassenpfad
hinzu. - Wählen Sie
Jython-standalone-2.7.2.jar
und klicken Sie auf Anwenden und Schliessen.
Sobald Jython
in unsere Java-Umgebung eingebunden ist, können wir nun Python-Skripte in Java ausführen. Die Klasse PythonInterpreter
stammt von Jython
, um Python-Skripte und -Operationen auszuführen.
Hier sind die verschiedenen Methoden von Jython
, um Python in Java auszuführen:
Methode | Beschreibung |
---|---|
setIn(PyObject) |
Wird verwendet, um ein Python-Objekt für den Standardeingabestream festzulegen. |
setIn(java.io.Reader) |
Wird verwendet, um einen Java IO Reader für den Standard-Eingabestream festzulegen. |
setIn(java.io.InputStream) |
Wird verwendet, um einen Java-IO-InputStream für den Standardeingabestream festzulegen. |
setOut(PyObject) |
Wird verwendet, um ein Python-Objekt für den Standardausgabestream festzulegen. |
setOut(java.io.Writer) |
Wird verwendet, um einen Java-IO-Writer für den Standardausgabestream festzulegen. |
setOut(java,io.OutputStream) |
Wird verwendet, um einen Java IO OutputStream für den Standardausgabestream festzulegen. |
setErr(java.io.Writer) |
Wird verwendet, um einen Java-IO-Writer für den Standardfehlerstrom festzulegen. |
setErr(PyObject) |
Wird verwendet, um ein Python-Objekt für den Standardfehlerstrom festzulegen. |
setErr(java.io.OutputStream) |
Wird verwendet, um einen Java IO OutputStream für den Standardfehlerstream festzulegen. |
eval(String) |
Wird verwendet, um einen Python-String für Java auszuwerten. |
eval(PyObject) |
Wird verwendet, um ein Python-Objekt für Java auszuwerten. |
exec(String) |
Wird verwendet, um eine Python-Zeichenfolge im lokalen Namespace auszuführen. |
exec(PyObject) |
Wird verwendet, um ein Python-Objekt im lokalen Namespace auszuführen. |
execfile(String Dateiname) |
Wird verwendet, um eine Python-Datei im lokalen Namespace auszuführen. |
execfile(java.io.InputStream) |
Wird verwendet, um einen Python InputStream im lokalen Namespace auszuführen. |
compile(String) |
Wird verwendet, um eine Python-Zeichenfolge als Ausdrucksmodul zu kompilieren. |
kompilieren (Skript, Dateiname) |
Wird verwendet, um ein Python-Skript als Ausdrucksmodul zu kompilieren. |
set(Stringname, Objektwert) |
Wird verwendet, um eine Variable vom Typ Objekt festzulegen. |
set(Stringname, PyObject-Wert) |
Wird verwendet, um eine Variable vom Typ PyObject zu setzen. |
get(String) |
Wird verwendet, um den Wert einer Variablen abzurufen. |
get(String name, Classjavaclass) |
Wird verwendet, um den Wert einer Variablen abzurufen und ihn als Instanz einer bestimmten Java-Klasse zurückzugeben. |
Nun kennen wir die Methoden aus den Jython
-Projekten. Versuchen wir, einige davon in unserem Beispiel zu verwenden: Die Datei script.py
:
print("Hello, This is Delftstack.com! The Best Tutorial Site!, Message from Python")
Die Implementierung von 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);
}
}
Der obige Code führt ein Python-Skript aus einer Datei aus und führt einige Python-Operationen mit den Methoden aus der obigen Tabelle aus. Siehe Ausgabe:
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