JAVA调⽤Python模型(含第三⽅库,参数输⼊)
因为需要⽤python做⼀个分类模型然后在java中调⽤,其中涉及到了挺多python第三⽅库,⽽且需要有参数传⼊传出
还是采取传统在java中以命令⾏的⽅式调⽤写好的python模型
因为传⼊参数不能只是⼀个字符串,,需要是⼀个对象,所以改进了⼀点⽹上的代码
try{
//需传⼊的参数,可以是⼀个值,也可以是⼀个对象
PositionDO positionDO =new PositionDO();
positionDO.setId(123);
positionDO.setName("java");
positionDO.setJobDesc("计算机");
List<PositionDO> a =new ArrayList<>();
a.add(positionDO);
a.add(positionDO);
a.add(positionDO);
//设置命令⾏传⼊参数
String python ="/usr/local/这⾥是⾃⼰的python位置/bin/python3.7 ";
String filePath ="/Users/这⾥是⾃⼰的代码位置/test.py ";
Process pr = Runtime().exec(python + filePath + a);
BufferedReader in =new BufferedReader(new InputStream()));
//获取输出
String line;
while((line = in.readLine())!= null){
System.out.println(line);
}
System.out.println(pr.waitFor());
in.close();
pr.waitFor();
// 调⽤异常输出,这⾥可以输出调⽤python失败的异常
InputStream errorStream = pr.getErrorStream();
BufferedReader error =new BufferedReader(new InputStreamReader(errorStream,"gbk"));
String lines = null;
while((lines = adLine())!= null){
System.out.println(lines);
}
error.close();
}catch(Exception e){
e.printStackTrace();
}
对于对象需要重写⼀下toString⽅法,因为都是以字符串的形式传过去的
public static class PositionDO{
private Integer id;
private String name;
private String Desc;
//这⾥省略了get、set
@Override
public String toString(){
return id +
"|"+ name +
"|"+ Desc;
}
}
python接收对象也同样需要做相似的处理,这⾥传到java的结果必须是python的print输出,因为是直接捕获python控制台的输出结果传过去的
python转java代码import sys
# java调⽤传参
job =[]
for i in range(1,len(sys.argv)):
a = sys.argv[i]
b = a.split('|')
job.append(b)
# job就是从java中传过来的参数,后续处理这⾥就不贴出来了
job的形式如下,怎么取⽤计算就看需要了
job[[123, java, 计算机], [123, java, 计算机], [123, java, 计算机]]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论