这篇文章主要介绍了java怎么调用Python文件包括传参,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
1.SpringMVC,Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架。2.Shiro,Apache Shiro是Java的一个安全框架。3.Mybatis,MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。4.Dubbo,Dubbo是一个分布式服务框架。5.Maven,Maven是个项目管理和构建自动化工具。6.RabbitMQ,RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。7.Ehcache,EhCache 是一个纯Java的进程内缓存框架。
第一个是通过jython,这个方法不太好用,当Python用到第三方库的时候,由于jython不可能涵盖所有python第三方类库,
所以建议用第二种Runtime.getRuntime()开启进程来执行python脚本文件
String[] arguments = new String[] {"python","D:\\ccc\\1.py",str};//指定命令、路径、传递的参数 try { Writer out = response.getWriter(); //获得HttpServletResponse输出流对象 Process process = Runtime.getRuntime().exec(arguments);//开启进程来执行脚本文件 BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));//获取字符输入流对象 String line = null; while ((line = in.readLine()) != null) { JSONArray Resulet = JSONArray.fromObject(util.DataHandle(line.toString()));//读取到结果(一行文字)进行数据处理 String json = Resulet.toString(); out.write(json);//使用输出流对象向小程序发送字符数据 } out.close(); in.close(); } catch (Exception e) { e.printStackTrace(); }
第一行代码传递的参数str就是图片的路径(我这实例代码只传递一个参数,如果传递多个参数直接在str,后面加,格式都是一样,Python代码接收参数也是不一样,接着往下看),剩下的代码我都上了注释
from keras.models import load_model import numpy as np from keras.preprocessing import image import sys import re def predict(pic_dir): model = load_model("D:/ccc/model.h6") images = image.load_img(pic_dir, target_size=(32,32)) images = image.img_to_array(images) images = np.expand_dims(images, axis=0) images=np.array(images,dtype=int) images_normalize=images.astype("float32")/255.0 pre_y=model.predict(images_normalize) pre_y=pre_y.reshape(-1) np.set_printoptions(suppress=False) pre_y=[pre_y[i]*100 for i in range(len(pre_y))] pre_y=[str(pre_y[i]) for i in range(len(pre_y))] for i in range(len(pre_y)): if pre_y[i].find('e',0,len(pre_y[i]))!=-1: wei=int(pre_y[i][len(pre_y[i])-1])-1 pre_y[i]=re.sub(r'e-.*$','',pre_y[i]) pre_y[i]=re.sub(r'[^0-9]','',pre_y[i]) for j in range(0,wei): pre_y[i]='0'+pre_y[i] pre_y[i]='0'+'.'+pre_y[i] pre_y=[pre_y[i]+"%" for i in range(len(pre_y))] return pre_y prediction=predict(sys.argv[1]) print(prediction)
上面是Python代码,prediction=predict(sys.argv[1])代码里面的sys.argv[1]就是接收传递过来的参数str,如果多个参数就以此类推接收
小程序接收到数据并输出到控制台
然后就是显示数据,给我小伙伴的深度学习点个赞!准确率还是挺高的
补充:Java调用Python文件
有时候我们想要通过java调用一个python文件,而这个python文件又必须在特定的virtualenv虚拟环境下才能运行。如果直接将这个python文件所需要的包安装到python系统环境下难免有些暴力
创建虚拟环境后,如果虚拟环境的文件夹叫做env,我们平时激活虚拟环境的命令是 source env/bin/activate 。在bin目录中还有一个文件叫做activate_this.py,我们通过这个文件切换到虚拟环境,在一个python文件(假设叫a.py)中调用该文件(activate_this.py),再书写想要调用的目标python文件,再由Java调用a.py即可完成指定虚拟环境下的python文件调用。
python文件名为a.py,代码如下
import os activate_this = 'path/to/activate_this.py' execfile(activate_this, dict(__file__=activate_this)) os.system("python target.py")
java代码
import java.io.BufferedReader; import java.io.InputStreamReader; public class Test { public static void main(String[] args) { try { System.out.println("start"); Process pr = Runtime.getRuntime().exec("python /home/kui/桌面/a.py"); BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream())); String line; while ((line = in.readLine()) != null) { System.out.println(line); } in.close(); pr.waitFor(); System.out.println("end"); } catch (Exception e) { e.printStackTrace(); } } }
感谢你能够认真阅读完这篇文章,希望小编分享的“java怎么调用Python文件包括传参”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。