Java運行Python腳本的幾種方式小結
Java 運行 Python 腳本的幾種方式
1. 使用 Jython
Jython 是一個完全用 Java 實現(xiàn)的 Python 解釋器,它允許在 Java 虛擬機 (JVM) 上運行 Python 代碼。通過 Jython,你可以在 Java 程序中直接調用 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) 是一個 Python 嵌入和解釋庫,它提供了在 Java 程序中調用 Python 代碼的接口。Jep 支持 CPython 寫的擴展模塊,并且能夠處理 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?? 類可以用來管理各種腳本引擎,包括 JSR-223 兼容的 Python 引擎。這種方法需要一個 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
如果你只是想運行一個 Python 腳本文件,而不是在 Java 程序中直接執(zhí)行 Python 代碼,你可以使用 ??ProcessBuilder?
? 來啟動一個外部進程。
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 中運行 Python 腳本的方法。每種方法都有其特點和適用場景,選擇哪種方法取決于你的具體需求和偏好。例如,如果你需要深度集成 Python 和 Java,Jython 或 Jep 可能是更好的選擇;如果你只是想運行一個獨立的 Python 腳本,使用 ??ProcessBuilder?? 可能更簡單。在Java中運行Python腳本通常涉及到使用Jython,因為Jython提供了在Java虛擬機(JVM)上運行Python代碼的能力。Jython允許你直接從Java調用Python代碼,反之亦然。下面是幾種在Java中運行Python腳本的方式的示例代碼:
1. 使用??ScriptEngineManager??和??ScriptEngine??
Java的??javax.script?
?包提供了??ScriptEngineManager?
?和??ScriptEngine?
?類,它們可以用來執(zhí)行腳本語言,包括Jython。
import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; public class RunPythonScript { public static void main(String[] args) { try { // 獲取ScriptEngineManager實例 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?
?來運行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 { // 設置Python腳本的路徑 String scriptPath = "path/to/your/python_script.py"; // 創(chuàng)建ProcessBuilder對象 List<String> command = List.of("python", scriptPath); ProcessBuilder processBuilder = new ProcessBuilder(command); // 啟動子進程 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?
?類來執(zhí)行外部命令的方法,包括Python腳本。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class RunPythonScript { public static void main(String[] args) { try { // 設置Python腳本的路徑 String scriptPath = "path/to/your/python_script.py"; // 創(chuàng)建Process對象 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?
?是一個輕量級的庫,它提供了在Java中調用Python腳本的簡單接口。
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"); // 調用Python腳本 PyObject result = jpy.call("your_python_script.py"); // 處理返回值 System.out.println(result.toString()); } catch (PyException e) { e.printStackTrace(); } } }
請注意,上述代碼示例中的??path/to/your/python_script.py?
?需要替換為你實際的Python腳本路徑。此外,確保你的Java項目有合適的權限來執(zhí)行系統(tǒng)命令或訪問Jython庫。在Java中運行Python腳本主要有三種方式:
- 使用Jython Jython 是一個Python解釋器,它運行在Java虛擬機(JVM)上。這意味著您可以在Java環(huán)境中直接運行Python代碼。要使用Jython,您需要先將Jython的JAR文件添加到您的Java項目中,然后使用PythonInterpreter類來執(zhí)行Python腳本。
下面是一個簡單的Java代碼示例,它使用Jython來執(zhí)行一個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"); // 替換為實際的Python腳本文件路徑 // 或者使用字符串來執(zhí)行代碼 // interpreter.exec("print('Hello, World!')"); System.out.println("Python script executed successfully."); } }
- 使用ScriptEngineManager Java的
ScriptEngineManager
類允許您使用不同的腳本引擎來執(zhí)行各種腳本的代碼,包括Python。您需要先添加一個支持Python的腳本引擎(如Jython)到您的Java項目中,然后使用ScriptEngineManager
來獲取一個ScriptEngine
對象,并通過它來執(zhí)行Python代碼。
下面是一個使用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(); } } }
- 使用第三方庫 除了Jython,還有一些其他的第三方庫可以幫助您在Java中運行Python腳本,例如
groovy-python
。這些庫通常提供了更高級別的抽象,使得在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來執(zhí)行Python代碼 System.out.println("Python script executed successfully."); } }
請注意,上述代碼示例您已經(jīng)安裝并配置了相應的庫(如Jython或??groovy-python?
?),并且您的Java項目能夠正確地引用這些庫。在實際使用時,請確保您已經(jīng)安裝并配置了所需的依賴項。
以上就是Java運行Python腳本的幾種方式小結的詳細內(nèi)容,更多關于Java運行Python腳本的資料請關注腳本之家其它相關文章!
相關文章
Maven如何構建可執(zhí)行的jar包(包含依賴jar包)
這篇文章主要介紹了Maven如何構建可執(zhí)行的jar包(包含依賴jar包) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11Spring-AOP @AspectJ進階之如何綁定代理對象
這篇文章主要介紹了Spring-AOP @AspectJ進階之如何綁定代理對象的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Springboot訪問templates html頁面過程詳解
這篇文章主要介紹了Springboot訪問templates html頁面過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-05-05解決Spring JPA 使用@transaction注解時產(chǎn)生CGLIB代理沖突問題
這篇文章主要介紹了解決Spring JPA 使用@transaction注解時產(chǎn)生CGLIB代理沖突問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08SpringBoot+Redis實現(xiàn)數(shù)據(jù)字典的方法
這篇文章主要介紹了SpringBoot+Redis實現(xiàn)數(shù)據(jù)字典的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10Spring Security OAuth2 授權碼模式的實現(xiàn)
這篇文章主要介紹了Spring Security OAuth2 授權碼模式的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08