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)相关推荐

  1. 仿照java做一个脚本语言_java调用其它语言脚本(python、js)

    1.背景 之前用开发过程一些功能如图像处理.相似度计算.水印等需要调用算法写的方法,但是算法一般都是用python语言进行开发.所以经常直接用java调用python脚本文件.在网上搜了很多方法也排了 ...

  2. Python到底是什么样的语言? Python和Java比谁更快? TensorFlow的主体是用Python写的吗?

    Python到底是什么样的语言? Python和Java比谁更快? TensorFlow的主体是用Python写的吗? Python到底是什么样的语言? 解析: 这里是一些关键点:Python是解释型 ...

  3. java 调用c语言_Java 调用C语言JNI库(Hello World实例)

    要在java中调用c语言的库,一直觉得很不可思议,但是Java提供了JNI这个东西,这也就变得可能了. 作为一个码农,我们还是从最简单的 Hello World开始吧. 首先说一下我们想要做的事情. ...

  4. java调用c语言_Java调用C语言动态库(JNA方式,持续)

    过程主要分为以下几个步骤: 1.vs2017编写cpp/h代码,编译成dll,编译成功后,用depends查看库的依赖是否有缺失,也可以自己写个demo,调用这个dll中的函数,是否可以调用成功作为验 ...

  5. 如何查看java项目的路径_java如何获取项目路径?

    java如何获取项目路径? java获取项目路径的方法: 1.项目路径,就是指classpath的根路径了. 是查找配置文件和classloader加载bytecode的起点 这次就以IntelliJ ...

  6. java 文件引用路径_JAVA项目引用文件路径问题

    比如我们有以下目录 |--project |--src |--javaapplication |--Test.java |--file1.txt |--file2.txt |--build |--ja ...

  7. java获取子路径_Java中路径的获取

    1.Java中获取路径的方法:  Class_Name.class .getResource("")        //   Class_Name.class .getResour ...

  8. java中获取路径_java中获取路径的几种基本的方法

    package com.ygh.blog.realpath; import java.io.File; import java.io.IOException; import java.io.Input ...

  9. java 获取包路径_java获取java文件路径的四种方法

    java获取java文件路径的四种方法 发布时间:2020-04-17 11:03:45 来源:亿速云 阅读:750 作者:小新 今天小编给大家分享的是java获取java文件路径的四种方法,很多人都 ...

最新文章

  1. Delphi 之Copyrect的使用
  2. 深入浅出ThreadLocal,你会吗?
  3. 【错误记录】Android Studio 编译报错 ( Invalid Gradle JDK configuration found )
  4. token验证_Swagger中添加Token验证
  5. 窗口分析函数19_Mysql查询窗口函数里第一个 最后一个 第N个元素的值的案例详解(FIRST_VALUE LAST_VALUE NVH_VALUE)
  6. 【WP7进阶】——扩展框架组件
  7. 【转】[完全免费] 在线UML Class Diagram 类图工具 - 教程第1部分
  8. Python基础1(2017-07-16)
  9. CFS 调度器数据结构篇
  10. 华为平板解锁工具_华为平板M6 10.8英寸首发评测 办公+影音+智能全面开花
  11. hbase官方文档中文版0.97
  12. iphone捷径未能连接服务器,ios13无法安装第三方捷径怎么办 不允许不受信任的快捷指令解决方法...
  13. img标签图片自适应的样式
  14. 开发应用多开实现方式_应用三种开发方式来加速您的组织
  15. MediaPlayer实现音乐文件的边下边播
  16. leanote 蚂蚁云笔记 源码编译
  17. Navicat Mysql 破解教程(亲测可用)
  18. 图像的均值滤波、中值滤波_JAVA
  19. 江苏省小学生计算机装备标准,江苏省小学信息技术装备标准汇编.doc
  20. 实验三 密码破解技术

热门文章

  1. SAP UI5 return sap.ui.view的实现
  2. SAP BOPF BO draft状态的数据激活原理
  3. Marketing Cloud里使用了哪个版本的UI5 Odata模型?
  4. when save is performed, registered callback will be called one by one
  5. CRM One Order 事件处理元数据初始化的准确位置
  6. no BDOC found in SMW01
  7. Regarding empty field check in business document save
  8. Change handler table ESH_EX_CPOINTER
  9. 使用form上传文件到application server的另一种办法
  10. What happens when clicking interaction record work center?