真的是被搞吐血了,java调用python、
之所以被卡很久才解决,首先你需要把你的python脚本在windows命令行
执行一次如果成功再做后面的操作
如果不成功报错显示(第三方库没找到,具体代码是什么no module not found)
出现这一步,你需要在命令行输入一下代码
(需要注意的是,python脚本和java调用的地方必须全部使用绝对路径)!!!
pip list
查看是否有包,如果有,找到那个包所在的文件夹
输入以下的代码
python//回车
import sys//回车
sys.path//然后查看你自己库所在的目录是否在这些目录中
这些目录是python自动找包的地方
如果不存在,你需要在系统的环境变量里的系统变量那里添加
PYTHONPATH变量然后把你包所在的文件夹目录拷进去(类似配置java环境变量)
重复以上步骤看是否有这个目录
然后再用命令行执行脚本看是否能执行
成功执行以后尝试java调用执行
- python代码(调用了第三方操作mysql的库)
import MySQLdb
if __name__ == '__main__':
db = MySQLdb.connect(
host="localhost",
user="root",
passwd="123456",
charset='utf8',
db="jianda")
cur = db.cursor()
print("success")
- Java代码
@Test
public String pyfileUpload() {
String result = "";
try {
//这个方法是类似隐形开启了命令执行器,输入指令执行python脚本
Process process = Runtime.getRuntime()
.exec("python解释器位置(这里一定要用python解释器所在位置不要用python这个指令)+ python脚本所在路径(一定绝对路径)");
//这种方式获取返回值的方式是需要用python打印输出,然后java去获取命令行的输出,在java返回
InputStreamReader ir = new InputStreamReader(process.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
result = input.readLine();//中文的话这里可能会有乱码,可以尝试转一下不过问题不大
// result1 = new String(result.getBytes("iso8859-1"),"utf-8");
input.close();
ir.close();
int re = process.waitFor();
System.out.println(result);
} catch (IOException | InterruptedException e) {
System.out.println("调用python脚本并读取结果时出错:" + e.getMessage());
}
return result;
}
浏览器返回结果
至此完全成功,真的搞吐血了