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

如何在Java中調(diào)用python文件執(zhí)行詳解

 更新時間:2022年05月05日 10:20:36   作者:小子挺不錯  
豐富的第三方庫使得python非常適合用于進行數(shù)據(jù)分析,最近在項目中就涉及到java調(diào)用python實現(xiàn)的算法,下面這篇文章主要給大家介紹了關于如何在Java中調(diào)用python文件執(zhí)行的相關資料,需要的朋友可以參考下

一、Java內(nèi)置Jpython庫(不推薦)

1.1 下載與使用

可以在官網(wǎng)下載jar包,官網(wǎng):http://ftp.cuhk.edu.hk/pub/packages/apache.org/

或者使用maven進行jar包下載

<dependency>
    <groupId>org.python</groupId>
    <artifactId>jython-standalone</artifactId>
    <version>2.7.0</version>
</dependency>

執(zhí)行代碼樣例:

PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("a=[5,2,3,9,4,0]; ");
interpreter.exec("print(sorted(a));"); 

1.2 缺陷

Jython內(nèi)置的庫有限,而且很多庫不存在,會報no model的錯誤,所以這里不推薦大家使用。

二、使用Runtime.getRuntime()執(zhí)行腳本?件

2.1 使用

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

publicclass Demo1 {
publicstaticvoid main(String[] args) {
        Process proc;
        // 編譯器是python
        String exe = "python";
        // py文件存的絕對路徑
        String path = "D:\\NLP.py";
        // 傳入的參數(shù)
        String args = "今天過的很開心";
        
		try {
            proc = Runtime.getRuntime().exec(exe + ' ' + path + ' ' + args);// 執(zhí)?py?件
            // ?輸?輸出流來截取結(jié)果
            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            String line = null;
		while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
            in.close();
            proc.waitFor();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } 
    }
}

2.2 缺陷

如果在你的python中,會使用自己包中的其他python文件中的函數(shù),那么很有可能無法導入,但是不會報錯,只會返回一個null。

三、利用cmd調(diào)用python文件

3.1 使用

這個方法就類似于在cmd中,使用 python file.py 參數(shù) 直接執(zhí)行python文件一樣

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

publicclass Demo1 {
publicstaticvoid main(String[] args) {
        Process proc;
        // 編譯器是python
        String exe = "cmd.exe";
        // py文件存的絕對路徑
        String path = "D:\\NLP.py";
        // 傳入的參數(shù)
        String args = "今天過的很開心";
        
		try {
            proc = Runtime.getRuntime().exec(exe + " \c start " + path + ' ' + args);// 執(zhí)?py?件

            proc.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }
}

3.2 優(yōu)化

考慮到python是否正在進行,或者是否調(diào)用python,可設置一些函數(shù)用于輔助:

這里沒有使用參數(shù),直接對文件進行讀取,傳參可能會存在編碼問題,Java默認UTF-8,cmd是GBK

package com.Lee.utils;
import java.io.*;
public class NLPUtils {
    // NLP處理
    public static String NLP(String data) throws Exception{
        try {
            inputToFile(data);
        }
        catch (Exception e){
            e.printStackTrace();
        }

        System.out.println("調(diào)用python程序");
        Process pcs = null;
        String py = "python.exe";
        try {
            if(processIsRun(py))
                killProcess(py);
            System.out.println("start");
            pcs = Runtime.getRuntime().exec("cmd.exe /c start F://python_project//NLP.bat");
            pcs.waitFor();
            if(processIsRun(py)){
                System.out.println("正在執(zhí)行");
                Thread.currentThread().sleep(30000);
            }
            System.out.println("end");
        }
        catch (Exception e){
            e.printStackTrace();
        }
        String result = "";
        try {
            System.out.println("out:" + outputFromFile());
            result = outputFromFile();
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return result;
    }
    // 清空文件
    public static void clearInfoForFile(String fileName) {
        File file =new File(fileName);
        try {
            if(!file.exists()) {
                file.createNewFile();
            }
            FileWriter fileWriter =new FileWriter(file);
            fileWriter.write("");
            fileWriter.flush();
            fileWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 輸入文件,參數(shù)為輸出字符串
    public static void inputToFile(String input) throws Exception{
        // 寫入前清空
        clearInfoForFile("F:\\python_project\\input.txt");
        //創(chuàng)建寫入流
        FileWriter writer=new FileWriter("F:\\python_project\\input.txt");
        // 寫入
        writer.write(input + "\r\n");
        //關閉資源
        writer.flush();
        writer.close();
    }
    // 讀取文件
    public static String outputFromFile() throws Exception{
        InputStreamReader isr = new InputStreamReader(new FileInputStream("F:\\python_project\\output.txt"), "GBK");
        BufferedReader read = new BufferedReader(isr);
        String s = null;
        String result = "";
        while((s = read.readLine()) != null)
            result += s;
        isr.close();
        read.close();
        return result;
    }
    // 殺掉一個進程
    public static void killProcess(String name) {
        try {
            String[] cmd = {"tasklist"};
            Process proc = Runtime.getRuntime().exec(cmd);
            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            String string_Temp = in.readLine();
            while (string_Temp != null) {
                // System.out.println(string_Temp);
                if (string_Temp.indexOf(name) != -1) {
                    Runtime.getRuntime().exec("taskkill /F /IM " + name);
                    System.out.println("殺死進程  " + name);
                }
                string_Temp = in.readLine();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 判斷進程是否存在
    public static boolean processIsRun(String ProjectName) {
        boolean flag = false;
        try {
            Process p = Runtime.getRuntime().exec("cmd /c tasklist ");
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            InputStream os = p.getInputStream();
            byte b[] = new byte[256];
            while (os.read(b) > 0)
                baos.write(b);
            String s = baos.toString();
            if (s.indexOf(ProjectName) >= 0) {
                flag = true;
            } else {
                flag = false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
}

總結(jié)

到此這篇關于如何在Java中調(diào)用python文件執(zhí)行的文章就介紹到這了,更多相關Java調(diào)用python文件執(zhí)行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用@TransactionalEventListener監(jiān)聽事務教程

    使用@TransactionalEventListener監(jiān)聽事務教程

    這篇文章主要介紹了使用@TransactionalEventListener監(jiān)聽事務教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 基于StringUtils工具類的常用方法介紹(必看篇)

    基于StringUtils工具類的常用方法介紹(必看篇)

    下面小編就為大家?guī)硪黄赟tringUtils工具類的常用方法介紹(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • idea打開項目沒有項目目錄問題及解決

    idea打開項目沒有項目目錄問題及解決

    這篇文章主要介紹了idea打開項目沒有項目目錄問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 記一次Feign中實現(xiàn)傳實體Bean的問題

    記一次Feign中實現(xiàn)傳實體Bean的問題

    這篇文章主要介紹了記一次Feign中如何傳實體Bean的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 深入了解Java線程池的原理和監(jiān)控

    深入了解Java線程池的原理和監(jiān)控

    這篇文章主要介紹了深入了解Java線程池的原理和監(jiān)控,創(chuàng)建Java線程需要給線程分配堆棧內(nèi)存以及初始化內(nèi)存,還需要進行系統(tǒng)調(diào)用,頻繁地創(chuàng)建和銷毀線程會大大降低系統(tǒng)的運行效率,這時候就要用到線程池,需要的朋友可以參考下
    2023-07-07
  • 解決idea中svn提交時performing vcs refresh時間很長的問題

    解決idea中svn提交時performing vcs refresh時間很長的問題

    這篇文章主要介紹了解決idea中svn提交時performing vcs refresh時間很長的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • springboot?自定義啟動器的實現(xiàn)

    springboot?自定義啟動器的實現(xiàn)

    本文主要介紹了springboot?自定義啟動器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Java?+?Selenium?+?OpenCV解決自動化測試中的滑塊驗證問題

    Java?+?Selenium?+?OpenCV解決自動化測試中的滑塊驗證問題

    OpenCV是一個基于Apache2.0許可(開源)發(fā)行的跨平臺計算機視覺和機器學習軟件庫,可以運行在Linux、Windows、Android和Mac?OS操作系統(tǒng)上,這篇文章主要介紹了Java?+?Selenium?+?OpenCV解決自動化測試中的滑塊驗證,需要的朋友可以參考下
    2022-07-07
  • java必學必會之方法的重載(overload)

    java必學必會之方法的重載(overload)

    java必學必會之方法的重載,介紹了方法的重載、構(gòu)造方法的重載,想要學好java方法的重載的朋友一定要好好閱讀這篇文章
    2015-12-12
  • idea中springboot整合mybatis找不到mapper接口的原因分析

    idea中springboot整合mybatis找不到mapper接口的原因分析

    這篇文章主要介紹了idea中springboot整合mybatis找不到mapper接口的原因分析及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論

四川省| 黎城县| 定日县| 广灵县| 丹东市| 福海县| 青岛市| 息烽县| 军事| 泉州市| 和平区| 武冈市| 石柱| 夏邑县| 青铜峡市| 镇平县| 景德镇市| 贵定县| 梓潼县| 柳河县| 庆安县| 漳平市| 扬州市| 行唐县| 美姑县| 芜湖县| 富川| 舞钢市| 永善县| 资阳市| 登封市| 偃师市| 本溪| 芦溪县| 瓦房店市| 宜良县| 大兴区| 犍为县| 辛集市| 文昌市| 托克托县|