Java调用jython

2023-11-13

因为工作需要,需要在Java Jvm 进程内调用Python脚本。下了Jython练练手,脚本语言看着真别扭啊。若干年前写自动化测试工具时也用过python一小阵子,但基本忘光光了。好了,直奔主题。

前提:

1. sun-jre1.6, jython 2.5

2. 在官网下下个jython_installer-2.5.0.jar,一路next, 在 /jython-install-path/里有个jython.jar, 把这个jython.jar import 进Java Project 里边。

python代码: fibo.py

[python]  view plain copy
  1.  # Fibonacci numbers module  
  2.   
  3. def fib(n):    # write Fibonacci series up to n  
  4.     a, b = 01  
  5.     while b < n:  
  6.         print b,  
  7.         a, b = b, a+b  
  8.   
  9. def fib2(n): # return Fibonacci series up to n  
  10.     result = []  
  11.     a, b = 01  
  12.     while b < n:  
  13.         result.append(b)  
  14.         a, b = b, a+b  
  15.     return result  


Java 代码:TestJython.java

[java]  view plain copy
  1. import org.python.core.PyException;  
  2. import org.python.core.PyFile;  
  3. import org.python.core.PyObject;  
  4. import org.python.core.PyString;  
  5. import org.python.util.PythonInterpreter;  
  6.   
  7. public class TestJython {  
  8.       
  9.     /** 
  10.      * 关注Jython这几个方面的内容: 
  11.      * 1. 怎样从某个指定的路径import一个Jython模块? 
  12.      * 2. 怎样调用模块里的方法? 
  13.      * 3. java 与 jython 间的参数应该怎样进行传递? 
  14.      *  
  15.      * @param args 
  16.      * @throws PyException 
  17.      */  
  18.     public static void main(String []args)throws PyException  
  19.     {  
  20.         PythonInterpreter interp = new PythonInterpreter();  
  21.           
  22.         // 1.   
  23.         // 引入系统模块,并将[./pythonsrc]加入模块搜索路径中去。  
  24.         interp.exec("import sys");  
  25.         interp.exec("sys.path.append('./pythonsrc')");  
  26.           
  27.         // 2. 引入 fibo, 执行fibo.fib(100), ok  
  28.         interp.exec("import fibo");  
  29.         interp.exec("fibo.fib(100)");  
  30.       
  31.         // 3. 在Java 程序中获得 python内置类型的变量值。  
  32.         String text = "'this is a bad day'";  
  33.         interp.exec("x = " + text + " + '!!!'");  
  34.         interp.exec("print x");  
  35.         PyObject object = interp.get("x");  
  36.         PyString xString = object.__str__();  
  37.         String outX = xString.asString();  
  38.           
  39.         interp.exec("_file = open('/home/fore/work/OaasSearch/search/oaas_search/workspace/oaas-search0.1/pythonsrc/fibo.py')");  
  40.         object = interp.get("_file");  
  41.         PyFile file = (PyFile)object;  
  42.         PyString content = file.read(100);  
  43.         System.out.println(content);  
  44.           
  45.         interp.exec("array = _file.read(100)");  
  46.         String array = interp.get("array").asString();  
  47.         System.out.println(array);  
  48.           
  49.         interp.exec("_file.close()");  
  50.         file.close();  
  51.     }  
  52. }  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java调用jython 的相关文章

随机推荐

  • Vue使用axios发送post请求,后端无法接收怎么处理?(Djnago后台)

    今天终于解决了一个困扰很久的问题 在使用Vue进行前端项目的搭建时 通常采用axios作为数据传输的工具 我们会发现 使用get请求一切都正常 但是使用post请求 会发生一些奇怪的事情 这次我使用的是python的web框架django
  • C#开发物联网实践(新手)之门槛

    ABP Cli安装问题 问题描述 想在VS2019上装CLI 输入 dotnet tool install g Volo Abp Cli 结果要求我下载VS2022 刚出的2022VS 我刚看完视频下载的VS2019 解决方法 下载国内版
  • vue教程

    原文 1 vue安装 1 1 直接用 script标签引入 对于制作原型或学习 你可以这样使用最新版本 对于生产环境 我们推荐链接到一个明确的版本号和构建文件 以避免新版本造成的不可预期的破坏 1 2 NPM创建 安装vue npm ins
  • 第14.6节 使用Python urllib.request模拟浏览器访问网页的实现代码

    Python要访问一个网页并读取网页内容非常简单 在利用 第14 5节 利用浏览器获取的http信息构造Python网页访问的http请求头 的方法构建了请求http报文的请求头情况下 使用urllib包的request模块使得这项工作变得
  • 人工智能+物联网+机器人 = AIOTBOT

    借着2019年人工智能 物联网 AIOT 的大潮 我辈机器人是否也能顺势而举 人工智能 物联网 机器人的融合缩写为 AIOTBOT
  • soap development issue

    description No Deserializer found to deserialize a xxx using encoding style yyy reason the requesting envelope xml doesn
  • Flutter 状态栏图标颜色方案

    方案一 使用 AppBar 配置 文章目录 方案一 使用 AppBar 配置 方案二 通过 AnnotatedRegion 控制 注意点 在 AppBar 中配置属性 brightness 其取值 Brightness dark AppBa
  • python如何输出一个数组_python中实现将多个print输出合成一个数组

    python中实现将多个print输出合成一个数组 比如有下面一段代码 for i in range 10 print s f list i name 该代码段的执行 会生成如下的10行 name 属性的字符串 f1 f2 f3 f4 f5
  • 根据请求动态设置 @Value 注入的属性值

    先说一下可以使用的场景 项目中有一些功能类使用了 Value修饰 这种属性取值通常要么是读取 yml 的配置文件 要么是读取配置中心 在我们在本地调试的时候Controller时 如果 如果Service层用到了 Value修饰 的属性时
  • JMeter:使用Docker进行分布式负载测试

    概述 单个的JMeter实例可能无法生成足够的负载来对应用程序进行压力测试 如本网站所示 一个JMeter实例将能够控制多个远程JMeter实例 并在你的应用程序上产生更大的负载 JMeter使用Java RMI Remote Method
  • Angular6 学习笔记——指令

    angular6 x系列的学习笔记记录 仍在不断完善中 学习地址 https www angular cn guide template syntax http www ngfans net topic 12 post 2 系列目录 1 组
  • 骰子【概率dp】

    题目链接 P1409 骰子 因为会有人被弹出队列 所以我设置的期望dp为 表示当现在队列中有i个人的时候 第j个人获胜的概率 于是有当只剩一个人的时候 那个人必胜 再往下 先看它在队首的情况 也就是直接获胜的概率加上它被弹到队尾时候的概率
  • IntelliJ IDEA 2023.2 新版本,拥抱 AI

    IntelliJ IDEA 近期连续发布多个EAP版本 官方在对用户体验不断优化的同时 也新增了一些不错的功能 尤其是人工智能助手补充 AI Assistant 相信在后续IDEA使用中 会对开发者工作效率带来不错的提升 以下是官方对AI
  • LeetCode:动态规划中的0-1背包问题【快来直接套模板啦】

    PS 0 1背包问题无疑是动态规划题目里面的非常经典的一类题目了 下面给出这类题目的一种解题模板 本文是参考代码随想录做的一些笔记 完整版本请戳链接 标准0 1背包问题 二维数组求解 标准的背包问题 有n件物品和一个最多能背重量为w的背包
  • 106 letcode - 重建二叉树

    class Solution 内存条里 有两个区域 堆和栈 其中 栈是我们函数跳转的关键 顺序是先进后出 通过压栈出栈 可以实现递归 1 当到达递归终止条件时候 则开始返回 例如 先序遍历二叉树中 每个节点都要执行三个操作 根 左 右 当对
  • Java基于 SpringBoot 的车辆充电桩系统

    博主介绍 程序员徐师兄 7年大厂程序员经历 全网粉丝30W Csdn博客专家 掘金 华为云 阿里云 InfoQ等平台优质作者 专注于Java技术领域和毕业项目实战 文章目录 1 效果演示 效果图 技术栈 2 前言介绍 完整源码请私聊 3 主
  • 关于今年五一调休。。

    作者主页 爱笑的男孩 的博客 CSDN博客 深度学习 YOLO 活动领域博主爱笑的男孩 擅长深度学习 YOLO 活动 等方面的知识 爱笑的男孩 关注算法 python 计算机视觉 图像处理 深度学习 pytorch 神经网络 opencv领
  • unity 渲染帧率优化-OnDemandRendering

    FixedUpdate更新速率设置 OnDemandRendering 相关的API 1 OnDemandRendering renderFrameInterval 3 解释说明 在一些静态UI的时候把OnDemandRendering r
  • Message": "请求的资源不支持 http 方法“GET”

    今天用postman测试后端api 总是报错 下面是问题解决方案 一 测试方法 public ApiResult Get int id ApiResult result new ApiResult result data 我是Get方法返回
  • Java调用jython

    Java调用jython 因为工作需要 需要在Java Jvm 进程内调用Python脚本 下了Jython练练手 脚本语言看着真别扭啊 若干年前写自动化测试工具时也用过python一小阵子 但基本忘光光了 好了 直奔主题 前提 1 sun