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 出现如下图说明安装成功:
安装完成后生成一个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<String> list;
public PythonInterpreter interpreter ;
public String scriptFile = "D:\\eclipseworkspace\\pydev\\python\\";
public static void setList(ArrayList<String> 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<String> getList(){
list = new ArrayList<String>();
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脚本中的函数: