一、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。执行结果如下: