當前位置:首頁 » 編程語言 » java調用python包

java調用python包

發布時間: 2022-10-15 02:39:47

1. 如何在java中調用python代碼

Jython(原JPython),是一個用Java語言寫的Python解釋器。 在沒有第三方模塊的情況下,通常選擇利用Jython來調用Python代碼, 它是一個開源的JAR包,你可以到官網下載 一個HelloPython程序 importorg.python.util.PythonInterpreter; publicclassHelloPython{ publicstaticvoidmain(String[]args){ PythonInterpreterinterpreter=newPythonInterpreter(); interpreter.exec("print('hello')"); } } 什麼是PythonInterpreter?它的中文意思即是「Python解釋器」。我們知道Python程序都是通過解釋器來執行的,我們在Java中創建一個「解釋器」對象,模擬Python解釋器的行為,通過exec("Python語句")直接在JVM中執行Python代碼,上面代碼的輸出結果為:hello 在Jvm中執行Python腳本 interpreter.execfile("D:/labs/mytest/hello.py"); 如上,將exec改為execfile就可以了。需要注意的是,這個.py文件不能含有第三方模塊,因為這個「Python腳本」最終還是在JVM環境下執行的,如果有第三方模塊將會報錯:javaImportError:Nomolenamedxxx 僅在Java中調用Python編寫的函數 先完成一個hello.py代碼: defhello(): return'Hello' 在Java代碼中調用這個函數: importorg.python.core.PyFunction; importorg.python.core.PyObject; importorg.python.util.PythonInterpreter; publicclassHelloPython{ publicstaticvoidmain(String[]args){ PythonInterpreterinterpreter=newPythonInterpreter(); interpreter.execfile("D:/labs/hello.py"); PyFunctionpyFunction=interpreter.get("hello",PyFunction.class);//第一個參數為期望獲得的函數(變數)的名字,第二個參數為期望返回的對象類型 PyObjectpyObject=pyFunction.__call__();//調用函數 System.out.println(pyObject); } } 上面的代碼執行結果為:Hello 即便只是調用一個函數,也必須先載入這個.py文件,之後再通過Jython包中所定義的類獲取、調用這個函數。 如果函數需要參數,在Java中必須先將參數轉化為對應的「Python類型」,例如: __call__(newPyInteger(a),newPyInteger(b)) a,b的類型為Java中的int型,還有諸如:PyString(Stringstring)、PyList(Iteratoriter)等。 詳細可以參考官方的api文檔。 包含第三方模塊的情況:一個手寫識別程序 這是我和舍友合作寫的一個小程序,完整代碼在這里:,界面上引用了corejava上的一段代碼。Python代碼是舍友寫的,因為在Python程序中使用了第三方的NumPy模塊,導致無法通過Jython執行。下面這個方法純粹是個人思路,沒有深入查資料。核心代碼如下: importjava.io.*; classPyCaller{ privatestaticfinalStringDATA_SWAP="temp.txt"; privatestaticfinalStringPY_URL=System.getProperty("user.dir")+"\test.py"; (Stringpath){ PrintWriterpw=null; try{ pw=newPrintWriter(newFileWriter(newFile(DATA_SWAP))); }catch(IOExceptione){ e.printStackTrace(); } pw.print(path); pw.close(); } publicstaticStringreadAnswer(){ BufferedReaderbr; Stringanswer=null; try{ br=newBufferedReader(newFileReader(newFile(DATA_SWAP))); answer=br.readLine(); }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } returnanswer; } publicstaticvoidexecPy(){ Processproc=null; try{ proc=Runtime.getRuntime().exec("python"+PY_URL); proc.waitFor(); }catch(IOExceptione){ e.printStackTrace(); }catch(InterruptedExceptione){ e.printStackTrace(); } } //測試碼 publicstaticvoidmain(String[]args)throwsIOException,InterruptedException{ writeImagePath("D:\labs\mytest\test.jpg"); execPy(); System.out.println(readAnswer()); } } 實際上就是通過Java執行一個命令行指令。

2. 怎麼使用java運行python腳本

引用 org.python包
1 PythonInterpreter interpreter = new PythonInterpreter();
2 interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); "); ///執行python腳本

2. 執行python .py文件
1 PythonInterpreter interpreter = new PythonInterpreter();
2 InputStream filepy = new FileInputStream("D:\\demo.py");
3 interpreter.execfile(filepy); ///執行python py文件
4 filepy.close();

3. 使用Runtime.getRuntime()執行腳本文件
這種方式和.net下面調用cmd執行命令的方式類似。如果執行的python腳本有引用第三方包的,建議使用此種方式。使用上面兩種方式會報錯java ImportError: No mole named arcpy。
1 Process proc = Runtime.getRuntime().exec("python D:\\demo.py");
2 proc.waitFor();
本回答由電腦網路分類達人 朱冬梅推薦
評論
1 0

瓶邪
採納率:92% 來自團隊:網路知道電腦團 擅長: 電腦/網路 生活 電子數碼
其他回答

如果是jython,也就是運行在Jvm上的python的話,可以使用JSR223,JDK1.6已經包含了該擴展包。JSR223是一個用於解析多種腳本語言的庫包,其中包括Jython。除了JSR223包之外,還需要jython-engine.jar包。
ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");
try
{
engine.eval(new FileReader("./script/listing.py"));
}
catch(ScriptException se)
{
}
catch(IOException ie)
{
}

3. Java如何調用Python的jar包

Python -> Native 代碼 整體思路 先將Python 源代碼轉換成 C 代碼,之後用 GCC 編譯 C 代碼為二進制模塊 so/dll,接著進行一次 Java Native 介面封裝,

4. java調用python問題

這是因為你jython的版本和你linux上裝的python的版本是不一致的。你可以看下jython的版本說明。
jython是用java代碼實現的python。你使用的jython這個版本系統庫可能真的沒有包含logging這個mole。

5. java怎麼點用python腳本

首先得聲明一下,java是java,python是python,你用java得環境跑python這不是找麻煩嗎,但是並不是說不行,java有一個Jpython得庫,你可以下載一下,這方面原理設計jni技術,建議了解一下,如果單純想運行一個腳本可以找Jpython得api文檔看看

6. 用java執行python

1.直接執行Python腳本代碼
引用 org.python包
1 PythonInterpreter interpreter = new PythonInterpreter();
2 interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); "); ///執行python腳本

2. 執行python .py文件
1 PythonInterpreter interpreter = new PythonInterpreter();
2 InputStream filepy = new FileInputStream("D:\\demo.py");
3 interpreter.execfile(filepy); ///執行python py文件
4 filepy.close();

3. 使用Runtime.getRuntime()執行腳本文件
這種方式和.net下面調用cmd執行命令的方式類似。如果執行的python腳本有引用第三方包的,建議使用此種方式。使用上面兩種方式會報錯java ImportError: No mole named arcpy。
1 Process proc = Runtime.getRuntime().exec("python D:\\demo.py");
2 proc.waitFor();

7. eclipse中 java程序怎樣調用python

eclipse中 java程序調用python方法如下:
package com.lyz.test.jython;
import org.python.util.PythonInterpreter;
/**
* 第一個Jython程序
* @author liuyazhuang
*
*/
public class FirstJythonScript {
public static void main(String args[]) {
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); ");
interpreter.exec("print days[1];");
}
}

8. Java中如何讓使用Python的統計包繪圖

看來是同道。你提到的這個問題很難。
java調用python容易。 java甚至可以直接調用python的類。python調用java更容易了。
不過GUI要想融合,據目前20年的技術來看,只有本土的可以。 比如以前的微軟體ActiveX,不管你是什麼語言開發的都可以在windows下用OLE方式嵌入。

java的制圖功能,因為它的設計理念 ,它是封閉的。也就是說,除非你使用了它本地化的GUI方法,否則就不可能實現。

那麼說,如果我一定要實現怎麼辦呢?只能走很長的彎路。方法還是有幾個的。
方法1:
在java的panel里嵌入一個瀏覽器,然後在瀏覽器里顯示統計圖表。這個真是不要太容易了。 不管是你是python生成的本地圖片,還是直接用javascript生成的圖都可以嵌入進去。美觀不用說

方法2:
繪圖使用開源的,比如plt之類的。不過它被本地化成java版本的。然後用java調用python,再用python產生數據後,通過jython調用java本地化的繪圖工具。

表面上看,這個東西就是沒有價值的,為什麼不直接用java調用繪圖。關鍵在於python本身對於數據處理的優勢太明顯。輕松就可以完成復雜的數據結構處理。所以還是有價值的

方法3:
浮動窗口方式。這個就不說了。如果你的java是固定在窗口特定位置的。這個就容易了。怎麼浮動窗口要根據操作系統而定。

方法4:簡單方案
python生成圖片後,輸出成JPEG或者是PNG或者是GIF,然後讓JAVA顯示這個圖片。這個可能是最最簡單的。

方法5:windows專用,不知道可否使用
僅限於特定場景,在要顯示圖片的地方,顯示一個品紅色的純色圖。然後讓python的圖形輸出轉到directshow之類的API,直接寫顯卡。這樣就可以顯示動畫效果。

熱點內容
循跡小車演算法 發布:2024-12-22 22:28:41 瀏覽:82
scss一次編譯一直生成隨機數 發布:2024-12-22 22:04:24 瀏覽:956
嫁接睫毛加密 發布:2024-12-22 21:50:12 瀏覽:975
linuxbin文件的安裝 發布:2024-12-22 21:46:07 瀏覽:798
vlcforandroid下載 發布:2024-12-22 21:45:26 瀏覽:664
電腦做網關把數據發送至伺服器 發布:2024-12-22 21:44:50 瀏覽:432
新華三代理什麼牌子的伺服器 發布:2024-12-22 21:33:21 瀏覽:342
歡太會員密碼是什麼 發布:2024-12-22 20:57:28 瀏覽:74
sqllocaldb 發布:2024-12-22 20:07:08 瀏覽:126
如何找到我的伺服器 發布:2024-12-22 19:52:14 瀏覽:301