JAVA 与 Python 脚本间相互调用实例

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

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

安装Jython 环境 下载 jython_installer-2.5.2:

这里写图片描述
安装完之后在CMD 输入 jython 出现如下图说明安装成功:

JAVA 与 Python 脚本间相互调用实例_第1张图片

安装完成后生成一个JAR 包 导入java中就可以了:

这里写图片描述

然后怎么知道能不能直接调用jython 呢?在java中运行下面代码 返回TRUE则说明可以调用了:

    //在java类中直接执行python语句
    public void test() {        interpreter.exec("days('mod','Tue','Wed','Thu','Fri','Sat','Sun'); ");
       interpreter.exec("print days[1];");
    }

我们接下来写如何调用Python 代码:


/**
 * jython库测试
 * @author mengfeiyang
 *
 */
public class JavaExecutePython {
    public static ArrayList list;
    public PythonInterpreter interpreter ;
    public String scriptFile = "D:\\eclipseworkspace\\pydev\\python\\";

    public static void setList(ArrayList list) {
        JavaExecutePython.list = list;
        System.out.print("改变后的值是:"+list);
    }

    public JavaExecutePython(){
        interpreter = new PythonInterpreter();
    };

    //在java类中直接执行python语句
    public void test01() {
        interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); ");
        interpreter.exec("print days[1];");
    }

    //在java中调用本机python脚本中的函数
    public void test02(){
        interpreter.execfile(scriptFile+"my_utils2.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脚本
    public void test03(){
        interpreter.execfile(scriptFile+"input.py");
    }

    public ArrayList getList(){
        list = new ArrayList();
        list.add("a");
        list.add("b");
        list.add("c");
        return this.list;
    }

创建Python脚本:
在目录 D:\eclipseworkspace\pydev\python\ 下建立名为 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)

#加载java 的ToJython 包下面的 JavaExecutePython 类
from ToJython import JavaExecutePython
execpy = JavaExecutePython()

def setList(list):
    return list

def getList():
    #调用 JavaExecutePython 类下面的getList方法
    list = execpy.getList();
    list[0] = "b";
    print list;
    #调用 JavaExecutePython 类下面的setList方法
    execpy.setList(list); 
    return list

getList()

在目录 D:\eclipseworkspace\pydev\python\ 下建立名为my_utils.py脚本代码:

def adder(a, b):  
    a = 2013;b = 2
    return a + b

在java中直接执行Python脚本:

这里写图片描述

在java中调用本机python脚本中的函数:

这里写图片描述

你可能感兴趣的:(java-核心技术,jython)