目录
1.前言
在写项目时,整体项目使用java写的,而算法是用python写的,所以需要在java程序中调用python代码,关于在Java中调用Python程序的实现,根据不同的用途可以使用多种不同的方法,目前我是用了直接利用Runtime来调用。
2.Runtime 调用Python脚本(可传参)
//调用python程序,执行推荐算法
public class RunPyrhon {
//#grade代表测试成绩,accuracy代表题目掌握程度,time代表时间效率,都为(0-100)间的值
public static double run(double grade,double accuracy,int time) throws IOException,InterruptedException {
String exe = "python";
String command = System.getProperty("user.dir")+"\\src\\main\\java\\cn\\edu\\xaut\\util\\pingjia.py";
DecimalFormat df=new DecimalFormat("######0.00");
String num1 =df.format(grade);
String num2 =df.format(accuracy);
String num3=df.format(time);
String[] cmdArr = new String[] {exe,command,num1,num2,num3};
Process process = Runtime.getRuntime().exec(cmdArr);
InputStream is = process.getInputStream();
DataInputStream dis = new DataInputStream(is);
String str = dis.readLine();
process.waitFor();
//System.out.println(str);
return Double.parseDouble(str);
}
}
from sys import argv
from decimal import Decimal
result=pingjia(Decimal(argv[1]),Decimal(argv[2]),Decimal(argv[3]))#ce
print(result)
3.需要注意的问题
1.将python文件放入项目中后如何获取其路径?
如下通过System.getProperty("user.dir")获取项目的根目录,然后再加上python文件再项目中的目录就可以获取python文件的绝对路径
String command = System.getProperty("user.dir")+"\\src\\main\\java\\cn\\edu\\xaut\\util\\pingjia.py";
2.调用python可以传参,但是只能传字符串,所以需要先将数据转为字符串,并且在python文件中再转为原数据类型,返回是通过流传输所以最终还需要将字符串类型转换为计算得到的数据类型。
4.参考
https://www.cnblogs.com/nuccch/p/8435693.html