最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java運(yùn)行Python腳本的幾種方式小結(jié)

 更新時(shí)間:2024年12月13日 11:05:00   作者:牛肉胡辣湯  
在跨語(yǔ)言編程中,有時(shí)候我們需要在 Java 應(yīng)用程序中執(zhí)行 Python 腳本,這可能是為了利用 Python 豐富的庫(kù)生態(tài)系統(tǒng),或者是為了在已有 Java 系統(tǒng)中集成一些 Python 特有的功能,本文給大家介紹了實(shí)現(xiàn)這幾種目標(biāo)的方法,需要的朋友可以參考下

Java 運(yùn)行 Python 腳本的幾種方式

1. 使用 Jython

Jython 是一個(gè)完全用 Java 實(shí)現(xiàn)的 Python 解釋器,它允許在 Java 虛擬機(jī) (JVM) 上運(yùn)行 Python 代碼。通過(guò) Jython,你可以在 Java 程序中直接調(diào)用 Python 代碼,反之亦然。

import org.python.util.PythonInterpreter;
 
public class RunPythonWithJython {
    public static void main(String[] args) {
        PythonInterpreter interpreter = new PythonInterpreter();
        interpreter.exec("print('Hello, World from Jython!')");
    }
}

2. 使用 Jep

Jep (Java Embed Python) 是一個(gè) Python 嵌入和解釋庫(kù),它提供了在 Java 程序中調(diào)用 Python 代碼的接口。Jep 支持 CPython 寫(xiě)的擴(kuò)展模塊,并且能夠處理 Python 的異常。

import com.nativelibs4java.py.Py;
 
public class RunPythonWithJep {
    public static void main(String[] args) {
        Py.initialize();
        Py.runString("print('Hello, World from Jep!')");
        Py.finalize();
    }
}

3. 使用 ScriptEngineManager

Java 中的 ??ScriptEngineManager?? 類可以用來(lái)管理各種腳本引擎,包括 JSR-223 兼容的 Python 引擎。這種方法需要一個(gè) JSR-223 兼容的 Python 腳本引擎,例如 ??javax.script?? 包中的 ??ScriptEngine??。

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
 
public class RunPythonWithScriptEngine {
    public static void main(String[] args) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("python");
        engine.eval("print('Hello, World from ScriptEngine!')");
    }
}

4. 使用 ProcessBuilder

如果你只是想運(yùn)行一個(gè) Python 腳本文件,而不是在 Java 程序中直接執(zhí)行 Python 代碼,你可以使用 ??ProcessBuilder?? 來(lái)啟動(dòng)一個(gè)外部進(jìn)程。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.List;
 
public class RunPythonScriptWithProcessBuilder {
    public static void main(String[] args) {
        List<String> command = List.of("python", "script.py");
        ProcessBuilder builder = new ProcessBuilder(command);
        try {
            Process process = builder.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上是幾種在 Java 中運(yùn)行 Python 腳本的方法。每種方法都有其特點(diǎn)和適用場(chǎng)景,選擇哪種方法取決于你的具體需求和偏好。例如,如果你需要深度集成 Python 和 Java,Jython 或 Jep 可能是更好的選擇;如果你只是想運(yùn)行一個(gè)獨(dú)立的 Python 腳本,使用 ??ProcessBuilder?? 可能更簡(jiǎn)單。在Java中運(yùn)行Python腳本通常涉及到使用Jython,因?yàn)镴ython提供了在Java虛擬機(jī)(JVM)上運(yùn)行Python代碼的能力。Jython允許你直接從Java調(diào)用Python代碼,反之亦然。下面是幾種在Java中運(yùn)行Python腳本的方式的示例代碼:

1. 使用??ScriptEngineManager??和??ScriptEngine??

Java的??javax.script??包提供了??ScriptEngineManager??和??ScriptEngine??類,它們可以用來(lái)執(zhí)行腳本語(yǔ)言,包括Jython。

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
 
public class RunPythonScript {
    public static void main(String[] args) {
        try {
            // 獲取ScriptEngineManager實(shí)例
            ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
            // 獲取Jython ScriptEngine
            ScriptEngine jython = scriptEngineManager.getEngineByName("python");
            // 執(zhí)行Python腳本
            jython.eval("print('Hello, World!')");
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }
}

2. 使用??ProcessBuilder??

你也可以使用??ProcessBuilder??來(lái)運(yùn)行Python腳本,這種方式可以讓你在Java中執(zhí)行任何系統(tǒng)命令,包括Python腳本。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
 
public class RunPythonScript {
    public static void main(String[] args) {
        try {
            // 設(shè)置Python腳本的路徑
            String scriptPath = "path/to/your/python_script.py";
            // 創(chuàng)建ProcessBuilder對(duì)象
            List<String> command = List.of("python", scriptPath);
            ProcessBuilder processBuilder = new ProcessBuilder(command);
            // 啟動(dòng)子進(jìn)程
            Process process = processBuilder.start();
            // 讀取輸出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 使用??Runtime.getRuntime().exec()??

這是另一種使用??Runtime??類來(lái)執(zhí)行外部命令的方法,包括Python腳本。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class RunPythonScript {
    public static void main(String[] args) {
        try {
            // 設(shè)置Python腳本的路徑
            String scriptPath = "path/to/your/python_script.py";
            // 創(chuàng)建Process對(duì)象
            Process process = Runtime.getRuntime().exec("python " + scriptPath);
            // 讀取輸出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. 使用??jpy??

??jpy??是一個(gè)輕量級(jí)的庫(kù),它提供了在Java中調(diào)用Python腳本的簡(jiǎn)單接口。

import jpy.PyObject;
import jpy.PyCallable;
import jpy.PyException;
 
public class RunPythonScript {
    public static void main(String[] args) {
        try {
            // 初始化JPy
            PyObject jpy = new PyObject("jpy");
            // 調(diào)用Python腳本
            PyObject result = jpy.call("your_python_script.py");
            // 處理返回值
            System.out.println(result.toString());
        } catch (PyException e) {
            e.printStackTrace();
        }
    }
}

請(qǐng)注意,上述代碼示例中的??path/to/your/python_script.py??需要替換為你實(shí)際的Python腳本路徑。此外,確保你的Java項(xiàng)目有合適的權(quán)限來(lái)執(zhí)行系統(tǒng)命令或訪問(wèn)Jython庫(kù)。在Java中運(yùn)行Python腳本主要有三種方式:

  • 使用Jython Jython 是一個(gè)Python解釋器,它運(yùn)行在Java虛擬機(jī)(JVM)上。這意味著您可以在Java環(huán)境中直接運(yùn)行Python代碼。要使用Jython,您需要先將Jython的JAR文件添加到您的Java項(xiàng)目中,然后使用PythonInterpreter類來(lái)執(zhí)行Python腳本。
    下面是一個(gè)簡(jiǎn)單的Java代碼示例,它使用Jython來(lái)執(zhí)行一個(gè)Python腳本:
import org.python.util.PythonInterpreter;
 
public class RunPythonScript {
    public static void main(String[] args) {
        PythonInterpreter interpreter = new PythonInterpreter();
        interpreter.execfile("your_python_script.py"); // 替換為實(shí)際的Python腳本文件路徑
        // 或者使用字符串來(lái)執(zhí)行代碼
        // interpreter.exec("print('Hello, World!')");
        System.out.println("Python script executed successfully.");
    }
}
  1. 使用ScriptEngineManager Java的ScriptEngineManager類允許您使用不同的腳本引擎來(lái)執(zhí)行各種腳本的代碼,包括Python。您需要先添加一個(gè)支持Python的腳本引擎(如Jython)到您的Java項(xiàng)目中,然后使用ScriptEngineManager來(lái)獲取一個(gè)ScriptEngine對(duì)象,并通過(guò)它來(lái)執(zhí)行Python代碼。
    下面是一個(gè)使用ScriptEngineManager的示例:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
 
public class RunPythonScript {
    public static void main(String[] args) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("python");
        try {
            engine.eval("print('Hello, World!')"); // 或者使用文件路徑
            System.out.println("Python script executed successfully.");
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }
}
  1. 使用第三方庫(kù) 除了Jython,還有一些其他的第三方庫(kù)可以幫助您在Java中運(yùn)行Python腳本,例如groovy-python。這些庫(kù)通常提供了更高級(jí)別的抽象,使得在Java中使用Python更加容易。
    使用groovy-python的示例:
import groovy.lang.GroovyShell;
 
public class RunPythonScript {
    public static void main(String[] args) {
        GroovyShell shell = new GroovyShell();
        shell.evaluate("import sys; print('Hello, World!', file=sys.stdout)"); // 使用Groovy來(lái)執(zhí)行Python代碼
        System.out.println("Python script executed successfully.");
    }
}

請(qǐng)注意,上述代碼示例您已經(jīng)安裝并配置了相應(yīng)的庫(kù)(如Jython或??groovy-python??),并且您的Java項(xiàng)目能夠正確地引用這些庫(kù)。在實(shí)際使用時(shí),請(qǐng)確保您已經(jīng)安裝并配置了所需的依賴項(xiàng)。

以上就是Java運(yùn)行Python腳本的幾種方式小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Java運(yùn)行Python腳本的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • IDEA 必要配置設(shè)置方式

    IDEA 必要配置設(shè)置方式

    這篇文章主要介紹了IDEA 必要配置設(shè)置方式,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • spring整合redis消息監(jiān)聽(tīng)通知使用的實(shí)現(xiàn)示例

    spring整合redis消息監(jiān)聽(tīng)通知使用的實(shí)現(xiàn)示例

    在電商系統(tǒng)中,秒殺,搶購(gòu),紅包優(yōu)惠卷等操作,一般都會(huì)設(shè)置時(shí)間限制,本文主要介紹了spring整合redis消息監(jiān)聽(tīng)通知使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-12-12
  • Java函數(shù)式接口Supplier接口實(shí)例詳解

    Java函數(shù)式接口Supplier接口實(shí)例詳解

    這篇文章主要介紹了Java函數(shù)式接口Supplier接口實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java中的LinkedBlockingQueue源碼解析

    Java中的LinkedBlockingQueue源碼解析

    這篇文章主要介紹了Java中的LinkedBlockingQueue源碼解析,LinkedBlockingQueue底層是一個(gè)鏈表(可以指定容量,默認(rèn)是Integer.MAX_VALUE),維持了兩把鎖,一把鎖用于入隊(duì),一把鎖用于出隊(duì),并且使用一個(gè)AtomicInterger類型的變量保證線程安全,需要的朋友可以參考下
    2023-12-12
  • JetBrains?產(chǎn)品輸入激活碼?Key?is?invalid?完美解決方案

    JetBrains?產(chǎn)品輸入激活碼?Key?is?invalid?完美解決方案

    JetBrains?系列產(chǎn)品(IDEA、Pycharm?等)使用本站破解教程?(opens?new?window),在輸入激活碼時(shí),部分小伙伴反應(yīng)說(shuō)提示?Key?is?invalid?無(wú)法激活,今天小編給大家分享完美解決方案,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • Java多線程CAS操作原理代碼實(shí)例解析

    Java多線程CAS操作原理代碼實(shí)例解析

    這篇文章主要介紹了Java多線程CAS操作原理代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • IDEA實(shí)現(xiàn)java遠(yuǎn)程調(diào)試全過(guò)程

    IDEA實(shí)現(xiàn)java遠(yuǎn)程調(diào)試全過(guò)程

    文章主要介紹了如何在IntelliJ IDEA中配置遠(yuǎn)程調(diào)試參數(shù),包括transport、server、suspend、address等選項(xiàng)的含義和作用,以及如何配置服務(wù)器防火墻以支持遠(yuǎn)程調(diào)試
    2025-11-11
  • SpringBoot常見(jiàn)get/post請(qǐng)求參數(shù)處理、參數(shù)注解校驗(yàn)及參數(shù)自定義注解校驗(yàn)詳解

    SpringBoot常見(jiàn)get/post請(qǐng)求參數(shù)處理、參數(shù)注解校驗(yàn)及參數(shù)自定義注解校驗(yàn)詳解

    這篇文章主要給大家介紹了關(guān)于SpringBoot常見(jiàn)get/post請(qǐng)求參數(shù)處理、參數(shù)注解校驗(yàn)及參數(shù)自定義注解校驗(yàn)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • 例舉fastJson和jackson轉(zhuǎn)json的區(qū)別

    例舉fastJson和jackson轉(zhuǎn)json的區(qū)別

    今天小編就為大家分享一篇關(guān)于例舉fastJson和jackson轉(zhuǎn)json的區(qū)別,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • C# 中Excel導(dǎo)入時(shí)判斷是否被占用三種方法

    C# 中Excel導(dǎo)入時(shí)判斷是否被占用三種方法

    這篇文章主要介紹了C# 中Excel導(dǎo)入時(shí) 判斷是否被占用三種方法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評(píng)論

吴江市| 库车县| 常山县| 邵东县| 灵宝市| 余庆县| 安义县| 仁寿县| 依兰县| 太白县| 巫山县| 邳州市| 特克斯县| 郑州市| 邢台市| 延庆县| 获嘉县| 巴楚县| 凯里市| 兰州市| 金寨县| 中方县| 东宁县| 博乐市| 大渡口区| 大邑县| 凤山县| 河北省| 师宗县| 天门市| 金秀| 贺州市| 高邑县| 临朐县| 中卫市| 天长市| 奉化市| 淮安市| 连平县| 法库县| 柳江县|