java执行python路径_java调用其它语言脚本(python、js)
1.背景
之前用开发过程一些功能如图像处理、相似度计算、水印等需要调用算法写的方法,但是算法一般都是用python语言进行开发。所以经常直接用java调用python脚本文件。在网上搜了很多方法也排了很多坑,最终选择了一个适应多种情况的方法。
js目前是在做爬虫的时候遇到,有些方法通过java来模拟不太容易实现。
2.前提
需要安装必要的python环境,这个当然需要算法同学帮助,特别是环境部署到服务器上也是坑很多,本地没问题的话,1、多是服务器下载包可能是网络问题造成的超时导致安装中断。timeout要设置大一些。
2、可能会存在大的文件(比如词库等),防止如git提交不上去问题
3.方案
直接使用org.python jar包
org.python
jython-standalone
2.7.0
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("具体执行语句");
在java中调用本地python脚本
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("文件路径");
// 第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型
PyFunction pyFunction = interpreter.get("函数名", PyFunction.class);
//调用函数,如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型”
PyObject pyObj = pyFunction.__call__(参数...);
System.out.println(pyObj);
上面两种方法都不建议使用:第一个是执行语句太长的话比较麻烦
二、jython自带的包很少,python经常引用第三方jar包
三、存在中文乱码问题(入参和出现都存在)
使用Runtime.getRuntime()执行脚本文件(最好)
//前面两个参数是固定的,一个是python版本,一个是脚本路径,后面才是入参
String[] args1 = new String[4];
args1[0] = "python3";
args1[1] = FM_PY_URL;//脚本地址
args1[2] = param1;
args1[3] = param2;
public String pythonFunction(String[] param){
String s="";
Process proc;
BufferedReader in = null;
try {
proc = Runtime.getRuntime().exec(param);// 执行py文件
//用输入输出流来截取结果
in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line ;
while ((line = in.readLine()) != null) {
s = s+line;
break;
}
proc.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
try { in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return s;//结果封装成字符串,特殊格式用java解析
}
执行js文件
ScriptEngineManager manager = new ScriptEngineManager();
//指定脚本文件类型
ScriptEngine engine = manager.getEngineByName("js");
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(文件路径);//文件放在resource下,相对地址
Reader reader = new InputStreamReader(inputStream, "UTF-8");
engine.eval(reader);
if(engine instanceof Invocable) {
Invocable invoke = (Invocable)engine; // 调用merge方法,并传入两个参数
String result = invoke.invokeFunction(方法名, 参数1,参数2...).toString(); //调用了js的aa方法
System.out.println(result);
}
java执行python路径_java调用其它语言脚本(python、js)相关推荐
- 仿照java做一个脚本语言_java调用其它语言脚本(python、js)
1.背景 之前用开发过程一些功能如图像处理.相似度计算.水印等需要调用算法写的方法,但是算法一般都是用python语言进行开发.所以经常直接用java调用python脚本文件.在网上搜了很多方法也排了 ...
- Python到底是什么样的语言? Python和Java比谁更快? TensorFlow的主体是用Python写的吗?
Python到底是什么样的语言? Python和Java比谁更快? TensorFlow的主体是用Python写的吗? Python到底是什么样的语言? 解析: 这里是一些关键点:Python是解释型 ...
- java 调用c语言_Java 调用C语言JNI库(Hello World实例)
要在java中调用c语言的库,一直觉得很不可思议,但是Java提供了JNI这个东西,这也就变得可能了. 作为一个码农,我们还是从最简单的 Hello World开始吧. 首先说一下我们想要做的事情. ...
- java调用c语言_Java调用C语言动态库(JNA方式,持续)
过程主要分为以下几个步骤: 1.vs2017编写cpp/h代码,编译成dll,编译成功后,用depends查看库的依赖是否有缺失,也可以自己写个demo,调用这个dll中的函数,是否可以调用成功作为验 ...
- 如何查看java项目的路径_java如何获取项目路径?
java如何获取项目路径? java获取项目路径的方法: 1.项目路径,就是指classpath的根路径了. 是查找配置文件和classloader加载bytecode的起点 这次就以IntelliJ ...
- java 文件引用路径_JAVA项目引用文件路径问题
比如我们有以下目录 |--project |--src |--javaapplication |--Test.java |--file1.txt |--file2.txt |--build |--ja ...
- java获取子路径_Java中路径的获取
1.Java中获取路径的方法: Class_Name.class .getResource("") // Class_Name.class .getResour ...
- java中获取路径_java中获取路径的几种基本的方法
package com.ygh.blog.realpath; import java.io.File; import java.io.IOException; import java.io.Input ...
- java 获取包路径_java获取java文件路径的四种方法
java获取java文件路径的四种方法 发布时间:2020-04-17 11:03:45 来源:亿速云 阅读:750 作者:小新 今天小编给大家分享的是java获取java文件路径的四种方法,很多人都 ...
最新文章
- Delphi 之Copyrect的使用
- 深入浅出ThreadLocal,你会吗?
- 【错误记录】Android Studio 编译报错 ( Invalid Gradle JDK configuration found )
- token验证_Swagger中添加Token验证
- 窗口分析函数19_Mysql查询窗口函数里第一个 最后一个 第N个元素的值的案例详解(FIRST_VALUE LAST_VALUE NVH_VALUE)
- 【WP7进阶】——扩展框架组件
- 【转】[完全免费] 在线UML Class Diagram 类图工具 - 教程第1部分
- Python基础1(2017-07-16)
- CFS 调度器数据结构篇
- 华为平板解锁工具_华为平板M6 10.8英寸首发评测 办公+影音+智能全面开花
- hbase官方文档中文版0.97
- iphone捷径未能连接服务器,ios13无法安装第三方捷径怎么办 不允许不受信任的快捷指令解决方法...
- img标签图片自适应的样式
- 开发应用多开实现方式_应用三种开发方式来加速您的组织
- MediaPlayer实现音乐文件的边下边播
- leanote 蚂蚁云笔记 源码编译
- Navicat Mysql 破解教程(亲测可用)
- 图像的均值滤波、中值滤波_JAVA
- 江苏省小学生计算机装备标准,江苏省小学信息技术装备标准汇编.doc
- 实验三 密码破解技术
热门文章
- SAP UI5 return sap.ui.view的实现
- SAP BOPF BO draft状态的数据激活原理
- Marketing Cloud里使用了哪个版本的UI5 Odata模型?
- when save is performed, registered callback will be called one by one
- CRM One Order 事件处理元数据初始化的准确位置
- no BDOC found in SMW01
- Regarding empty field check in business document save
- Change handler table ESH_EX_CPOINTER
- 使用form上传文件到application server的另一种办法
- What happens when clicking interaction record work center?