文档章节

java调用python方法的库jython介绍及使用实例

孟飞阳
 孟飞阳
发布于 2016/07/12 11:38
字数 654
阅读 3046
收藏 1

一、Jython 简介

Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。

Jython由于继承了Java和Python二者的特性而显得很独特。与Java的无缝集成,Jython能使任何部署了Java应用和框架的公司受益而不需要额外的工作。接受任何一种部门的编程语言,对任何一个公司而言都是不容易的,需要深思熟虑,因为这牵涉到整体结构、服务器和外围的工具。

Jython作为Java的一个无缝集成的语言,可以在已存在的Java应用上无缝增加而不需要重大抉择。很多公司都花费了很多资金来建立Java的应用,这使采用CPython、Perl、Ruby、PHP和其他不能透明地集成已有Java实现的高级语言的效益降低,吸引力下降。而Jython有能力对已存在的Java框架进行补充,且二者能无缝地结合。

二、jar包引入

(1)maven方式

<dependency>
    <groupId>org.python</groupId>
    <artifactId>jython-standalone</artifactId>
    <version>2.7.0</version>
</dependency>

(2)官网下载:http://www.jython.org/downloads.html

(3)我的网盘:https://yunpan.cn/cBMNJJMQ63MhH  访问密码 ecff

三、Python源码

本示例中使用到的Python源码:

(1)input.py

 #open files  

print 'hello'
number=[3,5,2,0,6]
print number
number.sort()
print number
number.append(0)
print number
print number.count(0)
print number.index(5)

(2)my_utils.py

def adder(a, b):  
    return a + b

四、jython测试类

package demo2;

import org.junit.Before;
import org.junit.Test;
import org.python.core.PyFunction;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter;
/**
 * jython库测试
 * @author mengfeiyang
 *
 */
public class JavaExecutePython {
	public PythonInterpreter interpreter ;
	public String basePath = JavaExecutePython.class.getResource("").getPath();
	@Before
	public void start(){
		interpreter = new PythonInterpreter();
	}
	
	//在java类中直接执行python语句
	@Test
	public void test01() {
        interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); ");
        interpreter.exec("print days[1];");
	}
	
	//在java中调用本机python脚本中的函数
	@Test
	public void test02(){
        interpreter.execfile(basePath+"my_utils.py");
        PyFunction func = (PyFunction) interpreter.get("adder",PyFunction.class);

        int a = 2010, b = 2;
        PyObject pyobj = func.__call__(new PyInteger(a), new PyInteger(b));
        System.out.println("anwser = " + pyobj.toString());
	}
	
	//直接执行Python脚本
	@Test
	public void test03(){
		interpreter.execfile(basePath+"input.py");
	}
}

五、部署

新建一个javaSE工程,导入jython.jar包。将以上的input.py,my_utils.py和JavaExecutePython类放到同一目录下:

六、测试结果

在JavaExecutePython类编辑界面,右键菜单选择Run as...,选择Junit Test。执行结果如下:

© 著作权归作者所有

孟飞阳
粉丝 217
博文 1056
码字总数 566359
作品 5
朝阳
个人站长
私信 提问
Java调用Python程序方法总结(最全最详细)

如何使用Java调用Python程序 本文为大家介绍如何java调用python方法,供大家参考。 实际工程项目中可能会用到Java和python两种语言结合进行,这样就会涉及到一个问题,就是怎么用Java程序来调...

短短的歼击机
06/21
126
1
可爱的 Jython

最初 Jython 称为 JPython,是一个十足的 Java 应用程序,它允许开发人员使用 Python 编程语言的语法和大多数特性。Java 程序员对 Jython 感兴趣的原因有几个: Python 解释器 shell 的 Jyth...

红薯
2008/12/01
4.2K
7
[雪峰磁针石博客]Jython介绍

快速入门 下面我们使用jython来调用自定义jar包中的类。 编辑java文件:Beach.java 编译成jar包: 添加Craps.jar到CLASSPATH,修改/etc/profile,修改CLASSPATH 使用. /etc/profile导入变量。...

Python测试开发人工智能
2018/07/17
0
0
Java中如何调用python的API?

我想在java程序中调用一个python程序的API。一开始采用的是jython,但是总是提示说python程序的某一个库无法找到。我查了这个python程序的源代码,是基于python2.6的,引用了一个python2.6的...

每天多一点
2012/05/08
4.1K
3
Jython 2.7 alpha1 发布

Jython 2.7 alpha1 发布了,可通过这里 下载. 详情请看 安装指南 Jython 2.7 alpha1 实现了大部分 CPython 2.6 和 2.7 的功能,但还有一些缺失,特别是 bytearray 和 io 系统上目前还没完成。...

oschina
2012/05/17
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

【2019年8月版本】OCP 071认证考试最新版本的考试原题-第5题

choose the best answer The CUSTOMERS table has a CUST_LAST_NAME column of data type VARCHAR2. The table has two rows whose COST_LAST_MANE values are Anderson and Ausson. Which q......

oschina_5359
29分钟前
3
0
电脑怎样制作流程图?分享绘制流程图方法

流程图的绘制可以用很多方法来实现,小编经常使用电脑对流程图进行绘制,即简单又便利,相信很多朋友都因为不知道怎样绘制流程图而选择了放弃,今天这篇文章希望可以让大家重拾绘制流程图的信...

干货趣分享
30分钟前
2
0
Elasticsearch 7.x 之文档、索引和 REST API 【基础入门篇】

前几天写过一篇《Elasticsearch 7.x 最详细安装及配置》,今天继续最新版基础入门内容。这一篇简单总结了 Elasticsearch 7.x 之文档、索引和 REST API。 什么是文档 文档Unique ID 文档元数据...

泥瓦匠BYSocket
34分钟前
2
0
TL665x-EasyEVM开发板处理器、flash、RAM

TL665x-EasyEVM是广州创龙基于SOM-TL665x核心板研发的一款TI C66x多核定点/浮点高性能DSP开发板,采用核心板+底板方式,底板尺寸为200mm*106.65mm,采用4*50pin和1*80pin B2B工业级连接器,稳...

Tronlong创龙
39分钟前
2
0
DevExpress Report-XRTable绑定数据

将从跳转前的页面(A)中获取传入的数据(dtOrd、BatchID、ModelID),绑定到Report报表对应的控件 ,代码如下: this.xrtBatchID.Text = sBatchID; this.xrtModel.Text ...

_Somuns
40分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部