Jython连接Java和Python的桥梁

 

Jython的安装步骤  

1、官方下载

https://wiki.python.org/jython/InstallationInstructions

2、执行安装

Java -jar 【此处是下载的jython jar包名】,或者双击jar包夜可以

3、配置环境变量

新增JYTHON_HOME的环境变量,并设置为安装路径。

配置classpath和path路径分别为%JYTHON_HOME%\Lib和%JYTHON_HOME%\bin

4 在cmd中测试是否配置成功

   

============================================================================================================================

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的优点相结合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值