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

Java調(diào)用python代碼的五種方式總結(jié)

 更新時(shí)間:2023年09月01日 11:26:39   作者:字符搬運(yùn)工-藍(lán)天  
這篇文章主要給大家介紹了關(guān)于Java調(diào)用python代碼的五種方式,在Java中調(diào)用Python函數(shù)的方法有很多種,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

你還在糾結(jié)怎么樣在Java中調(diào)用python嗎?我們在實(shí)際工程項(xiàng)目問題中,經(jīng)常會碰到不同語言代碼之間互調(diào)的問題,比如此處的Java調(diào)用python(常見Java調(diào)用python寫的處理模型來完成數(shù)據(jù)處理等)。

讓我們來看看具體怎么操作吧!

1. 無參數(shù)調(diào)用

說明: Java調(diào)用不帶參數(shù)的python代碼執(zhí)行

樣例代碼如下:

try {
	String exe = "python解釋器所處的絕對路徑";
	String py = "python代碼文件絕對地址";
	Process process = Runtime.getRuntime().exec(exe + " " + py);
	//獲取結(jié)果的同時(shí)設(shè)置輸入流編碼格式"gb2312"
	InputStreamReader isr = new InputStreamReader(process.getInputStream(),"gb2312");
	LineNumberReader input = new LineNumberReader(isr);
	String result = "";
	result = input.readLine();
	System.out.println(result);
	input.close();
	isr.close();
	process.waitFor();
} catch (InterruptedException | IOException e) {
	System.out.println("調(diào)用python腳本并讀取結(jié)果時(shí)出錯(cuò):" + e.getMessage());
}

2. 帶參數(shù)調(diào)用

帶參調(diào)用可以將命令和參數(shù)寫入String數(shù)組,然后作為執(zhí)行參數(shù)執(zhí)行。

基本語句如下:

String exe = "python解釋器所處的絕對路徑";
String py = "python代碼文件絕對地址";
String pram = "單個(gè)傳遞參數(shù),若參數(shù)為基本類型,轉(zhuǎn)化為String;若為數(shù)組等類型,也是將其轉(zhuǎn)換為String型";
String [] args = new String[] {exe, py, pram...};
Process process = Runtime.getRuntime().exec(args);

2.1. 單行返回值

說明: Java調(diào)用不帶參數(shù)的python代碼執(zhí)行

樣例代碼如下:

try {
	String exe = "python解釋器所處的絕對路徑";
	String py = "python代碼文件絕對地址";
	String pram = "單個(gè)傳遞參數(shù),若參數(shù)為基本類型,轉(zhuǎn)化為String;若為數(shù)組等類型,也是將其轉(zhuǎn)換為String型";
	String [] args = new String[] {exe, py, pram...};
	Process process = Runtime.getRuntime().exec(args);
	//獲取結(jié)果的同時(shí)設(shè)置輸入流編碼格式"gb2312"
	InputStreamReader isr = new InputStreamReader(process.getInputStream(),"gb2312");
	LineNumberReader input = new LineNumberReader(isr);
	String result = "";
	result = input.readLine();
	System.out.println(result);
	input.close();
	isr.close();
	process.waitFor();
} catch (InterruptedException | IOException e) {
	System.out.println("調(diào)用python腳本并讀取結(jié)果時(shí)出錯(cuò):" + e.getMessage());
}

2.2. 多行返回值

說明: Java調(diào)用不帶參數(shù)的python代碼執(zhí)行

樣例代碼如下:

try {
	String exe = "python解釋器所處的絕對路徑";
	String py = "python代碼文件絕對地址";
	String pram = "單個(gè)傳遞參數(shù),若參數(shù)為基本類型,轉(zhuǎn)化為String;若為數(shù)組等類型,也是將其轉(zhuǎn)換為String型";
	String [] args = new String[] {exe, py, pram...};
	ProcessBuilder builder = new ProcessBuilder(args);
    Process process = builder.start();
    BufferedReader success = new BufferedReader(new InputStreamReader(process.getInputStream(), "GB2312"));//獲取字符輸入流對象
    BufferedReader error = new BufferedReader(new InputStreamReader(process.getErrorStream(), "GB2312"));//獲取錯(cuò)誤信息的字符輸入流對象
    String line = null;
    List<String> success_result = new ArrayList<>();
    List<String> error_result = new ArrayList<>();
    //記錄輸出結(jié)果
    while ((line = success.readLine()) != null) {
        success_result.add(line);
    }
    //記錄錯(cuò)誤信息
    while ((line = error.readLine()) != null) {
        error_result.add(line);
    }
    success.close();
    error.close();
    process.waitFor();
    System.out.println(success_result);
    System.out.println(error_result);
} catch (InterruptedException | IOException e) {
	System.out.println("調(diào)用python腳本并讀取結(jié)果時(shí)出錯(cuò):" + e.getMessage());
}

3. Java中直接執(zhí)行python語句

注意: 此方法在使用之前需要導(dǎo)入依賴環(huán)境,如在maven中導(dǎo)入如下依賴:

<dependency>
    <groupId>org.python</groupId>
    <artifactId>jython-standalone</artifactId>
    <!--python版本在這里指定(2.x或3.x等)-->
    <version>3.7.0</version>	
</dependency>

調(diào)用語句如下:

import org.python.util.PythonInterpreter
public class JavaRunPython {
    public static void main(String[] args) {
    	//調(diào)用python的解釋器
        PythonInterpreter interpreter = new PythonInterpreter();
        //執(zhí)行Python語句
        interpreter.exec("str = 'hello world!'; ");
        interpreter.exec("print(str);");
    }
}

4. 通過PythonInterpreter直接調(diào)用python腳本

注意: 此方法也需要導(dǎo)入1.3中依賴

Java調(diào)用代碼如下:

import org.python.util.PythonInterpreter;
public class JavaPythonFile {
    public static void main(String[] args) {
        PythonInterpreter interpreter = new PythonInterpreter();
        //我在這里使用相對路徑,注意區(qū)分
        interpreter.execfile("D:/code/test.py");
    }
}

test.py舉例如下:

a = 1
b = 2
print(a +b)

5. Java通過調(diào)用bat文件間接調(diào)用python

hello.bat測試代碼如下:

echo hello world!
D:
cd D:\code\
start python test.py
pause

Java調(diào)用代碼如下:

try {
	StringBuilder sb = new StringBuilder();
	String batPath = "D:/hello.bat";
	Process process = Runtime.getRuntime().exec(batPath);
	InputStream in = process.getInputStream();
	BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
	String line;
	while ((line = bufferedReader.readLine()) != null) {
		sb.append(line + "\n");
	}
	in.close();
	try {
		process.waitFor();
	} catch (InterruptedException e) {
		System.out.println(e);
	}
} catch (IOException e) {
	System.out.println(e);
}

總結(jié) 

到此這篇關(guān)于Java調(diào)用python代碼的五種方式的文章就介紹到這了,更多相關(guān)Java調(diào)用python代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java為什么會出現(xiàn)精度丟失這種現(xiàn)象你知道嗎

    java為什么會出現(xiàn)精度丟失這種現(xiàn)象你知道嗎

    這篇文章主要介紹了Java精度丟失的問題,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-08-08
  • java代理 jdk動態(tài)代理應(yīng)用案列

    java代理 jdk動態(tài)代理應(yīng)用案列

    java代理有jdk動態(tài)代理、cglib代理,這里只說下jdk動態(tài)代理,jdk動態(tài)代理主要使用的是java反射機(jī)制,需要了解的朋友可以參考下
    2012-11-11
  • Java運(yùn)行時(shí)jar終端輸出的中文日志亂碼兩種解決方式

    Java運(yùn)行時(shí)jar終端輸出的中文日志亂碼兩種解決方式

    jar包啟動,今天java開發(fā)過來找,說jar包啟動日志是亂碼,這篇文章主要給大家介紹了關(guān)于Java運(yùn)行時(shí)jar終端輸出的中文日志亂碼的兩種解決方式,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • drools的簡單入門案例場景分析

    drools的簡單入門案例場景分析

    drools是一款由JBoss組織提供的基于Java語言開發(fā)的開源規(guī)則引擎,可以將復(fù)雜且多變的業(yè)務(wù)規(guī)則從硬編碼中解放出來,這篇文章主要介紹了drools的簡單入門案例,需要的朋友可以參考下
    2022-05-05
  • Mybatis批量提交實(shí)現(xiàn)步驟詳解

    Mybatis批量提交實(shí)現(xiàn)步驟詳解

    這篇文章主要介紹了Mybatis批量提交實(shí)現(xiàn)步驟詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 淺析Java中ConcurrentHashMap的存儲流程

    淺析Java中ConcurrentHashMap的存儲流程

    ConcurrentHashMap技術(shù)在互聯(lián)網(wǎng)技術(shù)使用如此廣泛,幾乎所有的后端技術(shù)面試官都要在ConcurrentHashMap技術(shù)的使用和原理方面對小伙伴們進(jìn)行360°的刁難,本文詳細(xì)給大家介紹一下ConcurrentHashMap的存儲流程,需要的朋友可以參考下
    2023-05-05
  • Java 添加數(shù)字簽名到excel及檢測,刪除簽名

    Java 添加數(shù)字簽名到excel及檢測,刪除簽名

    這篇文章主要介紹了Java 添加數(shù)字簽名到excel及檢測,刪除簽名的方法,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-04-04
  • spring?IOC的理解之原理和實(shí)現(xiàn)過程

    spring?IOC的理解之原理和實(shí)現(xiàn)過程

    這篇文章主要介紹了spring?IOC的理解之原理和實(shí)現(xiàn)過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • 超詳細(xì)解析Spring Bean的創(chuàng)建過程

    超詳細(xì)解析Spring Bean的創(chuàng)建過程

    這篇文章主要揭秘了Spring Bean的創(chuàng)建過程,文中通過代碼示例和圖文結(jié)合的方式解析的超級詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-05-05
  • Java使用TCP實(shí)現(xiàn)數(shù)據(jù)傳輸實(shí)例詳解

    Java使用TCP實(shí)現(xiàn)數(shù)據(jù)傳輸實(shí)例詳解

    這篇文章主要介紹了Java使用TCP實(shí)現(xiàn)數(shù)據(jù)傳輸實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評論

安图县| 驻马店市| 彰武县| 临城县| 垦利县| 静海县| 玛多县| 汉寿县| 临西县| 江阴市| 本溪| 镇平县| 遂平县| 卓尼县| 利辛县| 石狮市| 岳池县| 土默特左旗| 永吉县| 南漳县| 开远市| 彩票| 寻乌县| 建瓯市| 新化县| 奉节县| 千阳县| 斗六市| 西畴县| 万安县| 宁化县| 鞍山市| 教育| 乌恰县| 罗甸县| 施秉县| 宁明县| 樟树市| 石泉县| 威海市| 凉城县|