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

java調用python模塊

發布時間: 2023-03-20 06:46:07

❶ 如何在 java 中調用 python 代碼

可以用Python的擴展來實現。Python本來是C實現的,封裝二進制兼容的C++是很容易的。Java的話得通過JNI來實現,就是說在Python擴展里用C調用Java。另外,也可以寫一個TCP服務來包裝C++/Java的介面,通過網路來調用,這樣更通用。

❷ 如何在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執行一個命令行指令。

❸ 用java 調用python webservice 是怎麼調的

這次出差,我接觸最多的是spss,由於項目基於j2ee開發,而java又不能直接取得spss統計結果,好在spss對python的支持還行,最終成功實現了這個模塊。感謝前輩們做出的貢獻,沒有你們,我就不能這樣迅速、順利的完成項目,且別說寫這篇文章了。
在前期准備中,我摸索、嘗試了三種實現:jython,http,soap,在網上查了很多相關資料,都是只言片語,自己看了還要結合其他的資料才能弄個明白。當然,在這探索的過程中,我是幸運的,每天都讓我充滿驚喜,每天都有新的收獲。
jython是java版本的python,也就是java的完全實現。java代碼中,可以調用python的方法,缺點是,jython中導入第三方python mole時,不是那麼回事。因為spss的python api主要是一個.pyd的二進制文件,jython導包是按照java的位元組碼來導入的,所以當在jython中導入spss的python api時會出錯,這個想法徹底破滅。
http實現是在現有的B/S交互實現上突發奇想的,python中實現一個簡單的web server只要幾十行代碼,java使用apache的httpclient訪問,現在想來確實有點大材小用,自己寫一個http socket來請求和響應也寫不了多少代碼。最後還是實現了,支持spss中文,但是數據封包都要自己來實現,還是有嫌麻煩。
soap實現最簡單,server端幾十行代碼搞定。由於我把spss命令都封裝到一個方法中執行了,所以就沒有用wsdl來生成java代碼了,我使用了較底層的java的http socket,手動對SOAP-ENV打包,並向server端請求,手動解析響應數據。缺點是:SOAP對中文的支持,無論怎麼轉碼,不是python解析SOAP-ENV報錯,就是python執行spss命令報錯。

❹ 建立java與python的介面,讓java能調用python腳本。請問可以用什麼方式

不建議研究jython。比較簡單的思路是把python腳本完全當做一個外部程序,用shell方式調用它。
首先設計好python腳本的介面,把參數用命令行方式傳入,然後輸出列印出來。示例:

$ python func.py arg1 arg2
result
然後在java里就可以用Runtime來執行shell命令,解析輸出字元串然後得到結果。

❺ 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];");
}
}

❻ java怎麼點用python腳本

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

❼ java調用python時怎樣使用python的pandas模塊

安裝pandas1.Anaconda安裝pandas、Python和SciPy最簡單的方式是用Anaconda。Anaconda是關於Python數據分薯肢析和科學計算的分發包。2.Miniconda使用Anaconda會安裝一百多個依賴包,如果想靈活控制安裝的依賴包或帶寬有限,使用Miniconda是個不錯的選擇。Conda是個包管理器,Anaconda就是建立在它的基礎上。Conda不只跨平台還與語言無關,與pip和virtualenv相結合的作用相似。Miniconda允許先創建包含Python的安裝包,汪手慎然後用conda安裝其他的依賴包。3.Pypipandas可以通過pip安裝,但要安裝相關的依賴包。pipinstallpandas4.包管困敬理器可以用linux的包管理器進行安裝,如sudoapt-getinstallpython-pandaszypperinpython-pandas

❽ Java如何調用Python的jar包

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

❾ 怎麼在java的flink中調用python程序

一、在java類中直接執行python語句

import org.python.util.PythonInterpreter;
public class FirstJavaScript {
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];");

}// main
}

調用的結果是Tue,在控制台顯示出來,這是直接進行調用的。

二、在java中調用本機python腳本中的函數

首先建立一個python腳本,名字為:my_utils.py

def adder(a, b):
return a + b
然後建立一個java類,用來測試,

java類代碼 FirstJavaScript:

import org.python.core.PyFunction;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter;

public class FirstJavaScript {
public static void main(String args[]) {

PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("C:\\Python27\\programs\\my_utils.py");
PyFunction func = (PyFunction) interpreter.get("adder",
PyFunction.class);

int a = 2010, b = 2;
PyObject pyobj = func.__call__(new PyInteger(a), new PyInteger(b));
System.out.println("anwser = " + pyobj.toString());

}// main
}

得到的結果是:anwser = 2012

三、使用java直接執行python腳本

建立腳本inputpy

#open files

print 'hello'
number=[3,5,2,0,6]
print number
number.sort()
print number
number.append(0)
print number
print number.count(0)
print number.index(5)

建立java類,調用這個腳本:

import org.python.util.PythonInterpreter;

public class FirstJavaScript {
public static void main(String args[]) {

PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("C:\\Python27\\programs\\input.py");
}// main
}

得到的結果是:
hello
[3, 5, 2, 0, 6]
[0, 2, 3, 5, 6]
[0, 2, 3, 5, 6, 0]
2
3

熱點內容
燕山大學編譯原理期末考試題 發布:2024-11-05 20:13:54 瀏覽:523
華為電腦出現臨時伺服器 發布:2024-11-05 20:05:08 瀏覽:405
斗戰神免費挖礦腳本 發布:2024-11-05 19:53:25 瀏覽:662
網吧伺服器分別是什麼 發布:2024-11-05 19:45:32 瀏覽:389
忍3無傷腳本 發布:2024-11-05 19:11:40 瀏覽:302
江蘇雲伺服器散熱器定製 發布:2024-11-05 18:50:15 瀏覽:719
投資分紅網站源碼 發布:2024-11-05 18:36:38 瀏覽:504
我的世界推薦適合萌新的伺服器 發布:2024-11-05 18:30:03 瀏覽:578
c語言考級 發布:2024-11-05 18:16:54 瀏覽:505
易語言不能編譯安卓app嗎 發布:2024-11-05 18:14:11 瀏覽:836