Java コードから Python スクリプトを呼び出す

Sheeraz Gul 2023年10月12日
Java コードから Python スクリプトを呼び出す

このチュートリアルでは、Java コードから Python スクリプトを呼び出すための 3つの異なる方法を示します。

Java コードから Python スクリプトを呼び出す

プロジェクトの要件を満たすために、Java コードから Python スクリプトを呼び出さなければならない場合があります。 ProcessProcessBuilder、およびJythonを使用してそれを行うことができます。 以下でそれぞれをどのように使用できるか見てみましょう。

Process クラスを使用して Java コードから Python スクリプトを実行する

Java の Process クラスを使用して、Java コードから Python スクリプトを実行できます。 Python スクリプトを作成し、Java コードを使用して実行してみましょう。 以下の手順に従います。

  1. Python スクリプトを Java の文字列にコピーします。
  2. BufferedWriter を使用して .py 拡張子のファイルを作成します。
  3. 上記の文字列の内容を Python ファイルに書き込み、ライターを閉じます。
  4. Runtime.getRuntime().exec() を使用して Python ファイルを実行するプロセスを作成します。
  5. BufferedReader を使用してプロセスからデータを読み取ります。
  6. Python コードを実行して取得したデータを使用または印刷します。

上記の手順を 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();
    }
  }
}

上記のコードは、Java で Python スクリプトを作成して実行し、次の文字列を DemoPythonFile.py ファイルに書き込もうとします。

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

Python のスクリプトを作成して実行する必要はありません。 Python スクリプトとその出力を Java コードで直接読み込むこともできます。

Runtime.getRuntime().exec() 関数の非推奨に関する警告が表示される場合があることに注意してください。これは、Java が将来のリリースでこの関数を削除する可能性があることを意味します。

ProcessBuilder クラスを使用して Java コードから Python スクリプトを実行する

Java の ProcessBuilder クラスは、オペレーティング システム プロセスを作成するために使用されます。 このクラスを使用して、Java で Python スクリプトを実行することもできます。

次の手順に従って、ProcessBuilder クラスを使用して Java で Python スクリプトを実行します。

  1. システムに Python がインストールされていることを確認します。
  2. .py 拡張子を持つ Python スクリプトを作成するか、すでにある場合はそれを選択します。
  3. ProcessBuilder クラスのインスタンスを作成し、パラメーターとして python とスクリプト パスを渡します。
  4. start() メソッドを使用して ProcessBuilder を実行するプロセスを作成します。 これにより、Python スクリプトが実行されます。
  5. BufferedReader を作成して、プロセスから Python スクリプトの出力を取得します。
  6. 出力を印刷します。

この例を Java で実装してみましょう。 Python スクリプトは次のとおりです。

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

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);
    }
  }
}

上記のコードは、指定された Python スクリプトを Java を使用して実行し、コンソールに出力します。 出力を参照してください:

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

Jython を使用して Python と Java コードを一緒に実行する

Jython は、Java コードで Python スクリプトの実装を提供するプロジェクトです。 Jython は、Python と Java のコードを相互に実行します。

Java で Jython を使用するには、Jython-standalone-2.7.2.jar または最新バージョンをダウンロードして、プロジェクトのビルド path に追加するだけです。 次の手順に従って、Jython を Java 環境に追加します。

  1. here から Jython Standalone をダウンロードします。
  2. Jython-standalone-2.7.2.jar をビルド パス に追加します。
  3. プロジェクト Properties -> Java Build Path に移動します。
  4. 外部 Jar を classpath に追加します。
  5. Jython-standalone-2.7.2.jar を選択し、[適用して閉じる] をクリックします。

Jython が Java 環境に組み込まれると、Java で Python スクリプトを実行できるようになります。 PythonInterpreter クラスは Jython から派生したもので、Python スクリプトと操作を実行します。

Java で Python を実行するための Jython のさまざまな方法を次に示します。

方法 説明
setIn(PyObject) 標準入力ストリームの Python オブジェクトを設定するために使用されます。
setIn(java.io.Reader) 標準入力ストリームの Java IO リーダーを設定するために使用されます。
setIn(java.io.InputStream) 標準入力ストリームの Java IO InputStream を設定するために使用されます。
setOut(PyObject) 標準出力ストリームの Python オブジェクトを設定するために使用されます。
setOut(java.io.Writer) 標準出力ストリームの Java IO ライターを設定するために使用されます。
setOut(java,io.OutputStream) 標準出力ストリームの Java IO OutputStream を設定するために使用されます。
setErr(java.io.Writer) 標準エラーストリーム用の Java IO ライターを設定するために使用されます。
setErr(PyObject) 標準エラー ストリームの Python オブジェクトを設定するために使用されます。
setErr(java.io.OutputStream) 標準エラーストリームの Java IO OutputStream を設定するために使用されます。
eval(String) Java の Python 文字列を評価するために使用されます。
eval(PyObject) Java の Python オブジェクトを評価するために使用されます。
exec(String) ローカル名前空間で Python 文字列を実行するために使用されます。
exec(PyObject) ローカル名前空間で Python オブジェクトを実行するために使用されます。
execfile(文字列ファイル名) ローカル名前空間で Python ファイルを実行するために使用されます。
execfile(java.io.InputStream) ローカル名前空間で Python InputStream を実行するために使用されます。
compile(String) Python 文字列を式のモジュールとしてコンパイルするために使用されます。
compile(スクリプト, ファイル名) Python スクリプトを式のモジュールとしてコンパイルするために使用されます。
set(文字列名, オブジェクト値) オブジェクト型の変数を設定するために使用されます。
set(文字列名, PyObject値) PyObject 型の変数を設定するために使用されます。
get(String) 変数の値を取得するために使用されます。
get(文字列名, Classjavaclass) 変数の値を取得し、それを特定の Java クラスのインスタンスとして返すために使用されます。

これで、Jython プロジェクトのメソッドについてわかりました。 私たちの例でそれらのいくつかを使用してみましょう: script.py ファイル:

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

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);
  }
}

上記のコードは、ファイルから Python スクリプトを実行し、上記の表のメソッドを使用していくつかの Python 操作を実行します。 出力を参照してください:

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
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