Rufen Sie Python-Skript aus Java-Code auf

Sheeraz Gul 12 Oktober 2023
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:

  1. Kopieren Sie Ihr Python-Skript in einen String in Java.
  2. Erstellen Sie mit BufferedWriter eine Datei mit der Endung .py.
  3. Schreiben Sie den Inhalt aus obigem String in die Python-Datei und schließen Sie den Writer.
  4. Erstellen Sie einen Prozess zum Ausführen der Python-Datei mit Runtime.getRuntime().exec().
  5. Lesen Sie die Daten aus dem Prozess mit BufferedReader.
  6. 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:

  1. Stellen Sie sicher, dass Python auf Ihrem System installiert ist.
  2. Erstellen Sie ein Python-Skript mit der Erweiterung .py oder wählen Sie eines aus, wenn Sie bereits eines haben.
  3. Erstellen Sie eine Instanz der Klasse ProcessBuilder und übergeben Sie python und den Skriptpfad als Parameter.
  4. Erstellen Sie einen Prozess, um den ProcessBuilder mit der start()-Methode auszuführen; Dadurch wird das Python-Skript ausgeführt.
  5. Erstellen Sie einen BufferedReader, um die Ausgabe des Python-Skripts aus dem Prozess zu erhalten.
  6. 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:

  1. Laden Sie Jython Standalone von hier herunter.
  2. Fügen Sie die Datei Jython-standalone-2.7.2.jar zu Ihrem Build-Pfad hinzu.
  3. Gehen Sie zum Projekt Properties -> Java Build Path.
  4. Fügen Sie External Jar zu Ihrem Klassenpfad hinzu.
  5. 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 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