Java 調用 Python 方法

Java 調用 Python 方法是一種常用的跨語言調用技術,在一些場景下具有很大的優勢。本文將從多個方面闡述 Java 調用 Python 方法的實現方式和技巧。

一、Jython庫的使用

Jython是指用Java語言實現的Python解釋器,可以讓Java程序調用Python腳本,同時也能夠讓Python程序調用Java類和方法。使用Jython來調用Python方法非常簡單,只需要按照以下步驟操作即可:

  1. 通過Jython庫,導入Python的方法或類。
  2. 通過Java程序,實例化Python方法或類。
  3. 通過Java程序,調用Python方法或類的方法。

下面是代碼示例:

import org.python.core.PyFunction;
import org.python.core.PyObject;
import org.python.core.PySystemState;
import org.python.util.PythonInterpreter;
 
public class TestJython {
 
    public static void main(String[] args) {
 
        PythonInterpreter interpreter = new PythonInterpreter();
        PySystemState sys = Py.getSystemState();
        sys.path.add("D:\\test");
 
        interpreter.exec("from test import add");
        PyFunction pyFunction = interpreter.get("add", PyFunction.class);
 
        int a = 1, b = 2;
        PyObject pyobj = pyFunction.__call__(new PyInteger(a), new PyInteger(b));
        System.out.println(pyobj.toString());
        
    }
}

二、使用Runtime.getRuntime().exec()方法調用Python腳本

使用Java自帶的Runtime.getRuntime().exec()方法調用Python腳本也很簡單。只需要在Java程序中執行Python腳本的命令即可。但需要注意的是,在調用Python腳本之前,需要先切換到Python腳本所在的目錄下。下面是代碼示例:

try {
    Process process = Runtime.getRuntime().exec("python test.py", null, new File("D:\\test\\"));
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

三、使用Apache Commons Exec調用Python腳本

Apache Commons Exec是Apache的一個子項目,用於在Java程序中執行外部進程,包括Python解釋器。使用Apache Commons Exec調用Python腳本相對於使用Java自帶的Runtime.getRuntime().exec()方法更加方便,可以更加靈活地操作進程執行過程,並發現進程執行過程中的錯誤。下面是代碼示例:

CommandLine commandLine = CommandLine.parse("python test.py");
DefaultExecutor executor = new DefaultExecutor();
executor.setWorkingDirectory(new File("D:\\test\\"));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream);
executor.setStreamHandler(streamHandler);
int result = executor.execute(commandLine);
System.out.println(outputStream.toString());

四、在Java中使用Python第三方庫

在Java中使用Python第三方庫也是一個非常常見的需求。Python有豐富的第三方庫,可以提供各種各樣的功能,比如數據分析、機器學習等等。使用Java調用Python第三方庫的步驟如下:

  1. 在Java中安裝Python庫,可以使用pip來安裝。
  2. 在Java程序中導入Python庫,可以使用Jython、Py4J等工具導入。
  3. 在Java程序中調用Python庫的方法。

下面是代碼示例:

PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("import numpy as np");
interpreter.exec("arr = np.array([1, 2, 3])");
interpreter.exec("print(arr)");

五、使用Py4J庫調用Python方法

Py4J是一種Python和Java之間互操作的輕量級框架。使用Py4J可以在Java程序中調用Python代碼,也可以在Python程序中調用Java代碼。使用Py4J調用Python方法需要按照以下步驟操作:

  1. 在Java程序中啟動Py4J Gateway。
  2. 在Python程序中啟動Py4J Client。
  3. 在Java程序中,通過Gateway訪問Python中的對象或方法。

下面是代碼示例:

public class TestPy4J {
 
    public static void main(String[] args) {
 
        GatewayServer gatewayServer = new GatewayServer(new TestPy4J());
        gatewayServer.start();
 
        PythonInterpreter interpreter = new PythonInterpreter();
        interpreter.exec("from py4j.java_gateway import JavaGateway");
        interpreter.exec("gateway = JavaGateway()");
        interpreter.exec("test = gateway.jvm.Test()");
        interpreter.exec("test.sayHello()");
 
        gatewayServer.shutdown();
 
    }
 
    public void sayHello() {
        System.out.println("Hello Py4J!");
    }
 
}
 
public class Test {
 
    public void sayHello() {
        System.out.println("Hello Py4J!");
    }
 
}

總結

本文主要介紹了Java調用Python方法的多種方式,包括Jython、Runtime.getRuntime().exec()、Apache Commons Exec、Py4J等。針對每一種方式,都提供了相應的代碼示例和詳細的講解。希望讀者可以從本文中獲得實際的幫助和啟發。

原創文章,作者:UYPNT,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/375301.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
UYPNT的頭像UYPNT
上一篇 2025-04-29 12:49
下一篇 2025-04-29 12:49

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論