실력 향상 일지/자바

자바 파이썬 연동방법

juniordev 2024. 6. 16. 04:30

서론

이번에 24년도 캡스톤을 진행하며 다시한번 자바와 파이썬을 연동해야하는 일이 생겼다.

작년 캡스톤때는 Jython을 이용했는데 Jython의 단점은 파이썬버전이 2.x라는것이였다.

하지만 이번캡스톤에는 PaddleOcr을 사용해야 해서 필연적으로 Jython은 못쓰게되었다.

그래서 이번기회에 자바에서 파이썬을 쓰기 위한 방법을 여러방면으로 찾아봤다.

 

1. ProcessBuilder

ProcessBuilder는 가장 대표적인 외부 프로세스를 실행하는 Java 클래스다.

처음에 ProcessBuilder로 작성했다가 안되는거같아서 다른걸로 틀었다.

 

2. Jython

파이썬을 자바에서 직접 실행할수있도록 해주는 구현체

3학년 캡스톤때 사용했었다. Python 3.x는 지원하지않고 2.x만 지원한다.

 

3. Jep

자바에서 파이썬인터프리터를 임베디드 할수있게 해주는 라이브러리라고한다.

이번기회에 알아보면서 처음 발견한 라이브러리다.

import jep.Jep;
import jep.JepException;

public class JepExample {
    public static void main(String[] args) {
        try (Jep jep = new Jep()) {
            jep.runScript("script.py");
        } catch (JepException e) {
            e.printStackTrace();
        }
    }
}

이런식으로 사용한다는데 GPT를 이용해 내 코드에 적용시키니 에러가나서 Jep를 이용하는건 포기했다.

 

4. Apache Commons Exec

아파치에서 만든거같은 라이브러리다. 파이썬 스크립트를 실행할 수 있게 만들어준다.

ProcessBuilder와 유사하지만 다양한 기능을 제공한다고 해서 이번 캡스톤 프로젝트에 채택했다.

import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;

public class ExecExample {
    public static void main(String[] args) {
        CommandLine cmdLine = new CommandLine("python");
        cmdLine.addArgument("script.py");
        DefaultExecutor executor = new DefaultExecutor();
        try {
            executor.execute(cmdLine);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

5. Py4J

파이썬 프로그램이 자바 가상 머신(JVM)상의 객체에 접근할 수 있게 해주는 라이브러리.

파이썬에서 사용하는거같아서 그냥 아무생각없이 걸렀다.

from py4j.java_gateway import JavaGateway

gateway = JavaGateway()
random = gateway.jvm.java.util.Random()
number1 = random.nextInt(10)
number2 = random.nextInt(10)
print(number1, number2)

 

 

이밖에도 더 있으면 댓글한번씩 달아주십쇼