python读取java文件,java 执行python
目录
一、Java内置Jpython库(不推荐)1.1 下载与使用1.2 缺陷二、使用Runtime.getRuntime()执行脚本件2.1 使用2.2 缺陷三、利用煤矿管理局调用大蟒文件3.1 使用3.2 优化总结
一、Java内置Jpython库(不推荐)
1.1 下载与使用
可以在官网下载冲突包,官网:http://ftp.cuhk.edu.hk/pub/packages/apache.org/
或者使用专家进行冲突包下载
依赖关系groupIdorg.python/groupId人工制品有限公司独立/artifactId版本2 .7 .0/版本/依赖关系执行代码样例:
PythonInterpreter解释器=新的python解释器();interpreter.exec(a=[5,2,3,9,4,0];);翻译。exec( print(sorted(a)););
1.2 缺陷
Jython内置的库有限,而且很多库不存在,会报没有模型的错误,所以这里不推荐大家使用。
二、使用Runtime.getRuntime()执行脚本件
2.1 使用
导入Java。io。缓冲阅读器;导入Java。io。io异常;导入Java。io。inputstreamreader公共类demo 1 { publicstaticvoid main(String[]args){ Process proc;//编译器是python String exe= python//py文件存的绝对路径字符串路径= d : NLP.py//传入的参数字符串参数=今天过的很开心;请尝试{ proc=Runtime.getRuntime().exec(exe path args);//执py件//输输出流来截取结果缓冲读取器in=新缓冲读取器(新InputStreamReader(proc。getinputstream()));string line=null while((line=in . readline())!=null){ system。出去。println(line);}在。close();继续。等待();} catch(io异常e){ e . printstacktrace();} catch(中断异常e){ e . printstacktrace();} }}
2.2 缺陷
如果在你的大蟒中,会使用自己包中的其他大蟒文件中的函数,那么很有可能无法导入,但是不会报错,只会返回一个零.
三、利用cmd调用python文件
3.1 使用
这个方法就类似于在煤矿管理局中,使用python file.py参数直接执行大蟒文件一样
导入Java。io。缓冲阅读器;导入Java。io。io异常;导入Java。io。inputstreamreader公共类demo 1 { publicstaticvoid main(String[]args){ Process proc;
// 编译器是python String exe = "cmd.exe"; // py文件存的绝对路径 String path = "D:\NLP.py"; // 传入的参数 String args = "今天过的很开心"; try { proc = Runtime.getRuntime().exec(exe + " c start " + path + + args);// 执⾏py⽂件 proc.waitFor(); } catch (Exception e) { e.printStackTrace(); } }}
3.2 优化
考虑到python是否正在进行,或者是否调用python,可设置一些函数用于辅助:
这里没有使用参数,直接对文件进行读取,传参可能会存在编码问题,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("调用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("正在执行"); 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(); } } // 输入文件,参数为输出字符串 public static void inputToFile(String input) throws Exception{ // 写入前清空 clearInfoForFile("F:\python_project\input.txt"); //创建写入流 FileWriter writer=new FileWriter("F:\python_project\input.txt"); // 写入 writer.write(input + "rn"); //关闭资源 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; }}
总结
到此这篇关于如何在Java中调用python文件执行的文章就介绍到这了,更多相关Java调用python文件执行内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。