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

java調用python

發布時間: 2023-02-21 09:41:04

java調用python出現亂碼怎麼解決

java調Python返回結果出現亂碼解決:

Python腳本編碼格式已經用了utf-8,但是返回還是亂碼,說明是java這邊傳過去編碼有問題。

1、Python編碼格式:

2、一般我們中文文本編碼格式常用的有:UTF-8,GBK,GB2312。分別試一下就知道了:

utf-8不行!!!

BGK可以!

GB2312也可以!

發現了!utf-8是國際通用的編碼,而我們國家就是GB2312和GBK,gb2312是簡體中文,gbk包含簡體和繁體。而我們電腦是windows系統,windows默認的編碼方式是GBK,所有直接用GBK就可以解決問題了!

眾多python培訓視頻,盡在python學習網,歡迎在線學習!

⑵ 如何在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 代碼

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

⑷ Java如何調用Python的jar包

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

⑸ 如何在java工程里運行一個python腳本

可以使用jython


方法參考如下

PythonInterpreter interpreter = new PythonInterpreter();

interpreter.execfile("uar/local/xxx.py");

//pyFunction :py中方法名

PyFunction func = (PyFunction)interpreter.get("pyFunction",PyFunction.class);

Integer a = 1

Integer b = 2

// py中方法傳參

PyObject pyobj = func.__call__(new PyInteger(a), new PyInteger(b));

System.out.println("anwser = " + pyobj.toString());

⑹ 怎麼在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

⑺ 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調用python許可權不足你的賬號沒有文件夾的許可權唄,不知道你是用什麼容器調用的python。如果是aspx,它是用另外一個系統賬號來運行的,和你當前登錄的賬號是不一樣的,許可權也不一樣,不能訪問很正常。你把imgs設為所有人都有許可權讀寫就行了

⑼ java怎麼點用python腳本

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

⑽ bufferedreaderreadline換行符不完全卡死

bufferedreaderreadline換行符不完全卡死
問題1 Java調用python返回值一直為null
問題2 BufferedReader的readline函數無任何輸出結果,進程長時間卡住
最近在做項目時,需要用到Java調用python文件並讀取運行結果。一般Java調用簡單的Python文件(不包含第三方庫的)是沒有任何問題的,但是我需要用到tensorflow、keras、numpy等第三方庫,所以遇到了很多麻煩,經過各種網路查找,最終解決了問題,在這里做一個總結歸納。
問題1 Java調用python返回值一直為null
這個問題是我沒有創建虛擬環境造成的,因為自己電腦上用的一直是Anaconda安裝時自帶的python,沒有創建自己的虛擬環境,因此在Java中調用python文件時,就會找不到各種第三方庫的問題。
問題2 BufferedReader的readline函數無任何輸出結果,進程長時間卡住
這個問題我也找了很多方法才解決,產生這個問題的主要原因是:
命令在運行的過程中會向標准輸出或者標准錯誤輸出寫出數據,但JVM又沒有去讀,導致緩沖區滿,進而導致進程阻塞。因為我的python文件調用的tensorflow,他會輸出一堆警告信息,這些警告信息屬於錯誤流(ErrorStream),如果我們沒有及時處理,就會導致緩沖區占滿,從而導致進程阻塞。
Process.getInputStream()和Process.getErrorStream()分別返回Process的標准輸出流和錯誤流,兩個流如果處理不當,其緩沖區不能被及時清除而被塞滿,則進程被阻塞,即使調用Process.destory()也未必能銷毀被阻塞的子進程。
這個問題的解決的方法比較簡單,既然問題是緩沖區滿之後沒有及時清理,那麼只要在Java代碼里去讀一下數據,保證緩沖區不會滿即可.

熱點內容
u盤免費加密 發布:2024-11-08 07:34:51 瀏覽:351
英雄聯盟登錄密碼在哪裡修改 發布:2024-11-08 07:25:16 瀏覽:515
努比亞有沒有免費雲存儲 發布:2024-11-08 07:08:18 瀏覽:569
主機什麼配置可以打絕地求生 發布:2024-11-08 07:08:18 瀏覽:988
方舟手游如何請入火影伺服器 發布:2024-11-08 07:05:57 瀏覽:311
ip6根伺服器最新消息 發布:2024-11-08 07:05:56 瀏覽:334
探探存儲的圖片在哪裡找 發布:2024-11-08 07:04:32 瀏覽:224
slp用什麼編譯器 發布:2024-11-08 07:04:16 瀏覽:413
三一重工天泵參數密碼是什麼 發布:2024-11-08 06:59:45 瀏覽:660
攻擊伺服器資料庫 發布:2024-11-08 06:45:57 瀏覽:909