Java 코드에서 Python 스크립트 호출

Sheeraz Gul 2023년10월12일
Java 코드에서 Python 스크립트 호출

이 자습서에서는 Java 코드에서 Python 스크립트를 호출하는 세 가지 접근 방식을 보여줍니다.

Java 코드에서 Python 스크립트 호출

경우에 따라 프로젝트 요구 사항을 충족하기 위해 Java 코드에서 Python 스크립트를 호출해야 합니다. Process, ProcessBuilderJython을 사용하여 이를 수행할 수 있습니다. 아래에서 각각을 어떻게 사용할 수 있는지 봅시다.

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

위의 코드는 Java를 사용하여 주어진 Python 스크립트를 실행하고 콘솔에 인쇄합니다. 출력 참조:

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 또는 최신 버전을 다운로드하여 프로젝트의 빌드 경로에 추가하기만 하면 됩니다. Java 환경에 Jython을 추가하려면 아래 단계를 따르십시오.

  1. 여기에서 Jython Standalone을 다운로드합니다.
  2. 빌드 경로Jython-standalone-2.7.2.jar를 추가합니다.
  3. 속성 -> Java 빌드 경로 프로젝트로 이동합니다.
  4. classpath에 외부 Jar를 추가합니다.
  5. Jython-standalone-2.7.2.jar를 선택하고 적용 후 닫기를 클릭합니다.

Java 환경에 Jython이 포함되면 이제 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 문자열을 표현 모듈로 컴파일하는 데 사용됩니다.
컴파일(스크립트, 파일명) 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