============================================================================================================================
Jython在java工程中的使用
在java工程中加入Jython安装目录下的jython.jar即可在java中使用Jython了。
创建java工程
1.在java类中直接执行python语句
import javax.script.*; import org.python.util.PythonInterpreter; import java.io.*; import static java.lang.System.*; public class FirstJavaScript { public static void main(String args[]) { PythonInterpreter interpreter = new PythonInterpreter(); interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); "); interpreter.exec("print days[1];"); }//main }
这样得到的结果是Tue,在控制台显示出来,这是直接进行调用的。
2.在java中调用本机python脚本中的函数:
首先建立一个python脚本,名字为:my_utils.py
<span style="font-size:18px;">def adder(a, b): return a + b </span>
然后建立一个java类,用来测试,
java类代码 FirstJavaScript:
import javax.script.*; import org.python.core.PyFunction; import org.python.core.PyInteger; import org.python.core.PyObject; import org.python.util.PythonInterpreter; import java.io.*; import static java.lang.System.*; public class FirstJavaScript { public static void main(String args[]) { PythonInterpreter interpreter = new PythonInterpreter(); interpreter.execfile("C:\\Python27\\programs\\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()); }//main }
得到的结果是:anwser = 2012
3.使用java直接执行python脚本,
建立脚本inputpy
#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) for num in number: print num, print '\n'
建立java类,调用这个脚本:
public class TestJython { /** * @param args */ public static void main(String[] args) { PythonInterpreter interpreter = new PythonInterpreter(); interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun')"); interpreter.exec("print days[1]"); //调用python的函数 interpreter.execfile("D:\\Jython\\sum.py"); PyFunction func = (PyFunction)interpreter.get("add", PyFunction.class); int a = 200,b=100; PyObject pyObject = func.__call__(new PyInteger(a),new PyInteger(b)); System.out.println("answer:-->> "+pyObject.toString()); //执行python脚本 interpreter.execfile("D:\\Jython\\input.py"); //代码中写python脚本 String sourceString = "if a<b:\n"+"\tprint a"; interpreter.exec("import sys"); interpreter.set("a",new PyInteger(1314)); interpreter.set("b",new PyInteger(1315)); interpreter.exec("print a"); interpreter.exec(sourceString); interpreter.exec("print 'NoNo'"); interpreter.exec("print 'hello world'"); } }
这个例子是直接按照http://blog.csdn.net/anbo724/article/details/6608632敲的
但是有一个问题需要大家注意:
比如在java代码里直接写python代码,遇到
a = 1 while a<10: a = a + 1 If I pass the entire string (all three lines of code) to the interpreter, it works fine. PythonInterpreter interp = new PythonInterpreter(); interp.exec(sourceString); However, if I pass each line separately, then it throws an exception when reading the while statement since it expects some code with indentation after the while statement. The error message is ("mismatched input '<EOF>' expecting INDENT", ('<string>', 3, 11, 'while a<10:\n'))
所以你最好遇到这种缩进问题的话,就用字符串先写好在处理
最终的目的是让python的优点和java的优点相结合