java調用python方法的庫jython介紹及使用實例

1、Jython 簡介

Jython是一種完整的語言,而不是一個Java翻譯器或僅僅是一個Python編譯器,它是一個Python語言在Java中的徹底實現。Jython也有不少從CPython中繼承的模塊庫。最有趣的事情是Jython不像CPython或其餘任何高級語言,它提供了對其實現語言的一切存取。因此Jython不只給你提供了Python的庫,同時也提供了全部的Java類。這使其有一個巨大的資源庫。html

Jython因爲繼承了Java和Python兩者的特性而顯得很獨特。與Java的無縫集成,Jython能使任何部署了Java應用和框架的公司受益而不須要額外的工做。接受任何一種部門的編程語言,對任何一個公司而言都是不容易的,須要深思熟慮,由於這牽涉到總體結構、服務器和外圍的工具。java

Jython做爲Java的一個無縫集成的語言,能夠在已存在的Java應用上無縫增長而不須要重大抉擇。不少公司都花費了不少資金來創建Java的應用,這使採用CPython、Perl、Ruby、PHP和其餘不能透明地集成已有Java實現的高級語言的效益下降,吸引力降低。而Jython有能力對已存在的Java框架進行補充,且兩者能無縫地結合。python

2、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  訪問密碼 ecffapp

3、Python源碼

本示例中使用到的Python源碼:框架

(1)input.pymaven

#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

4、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");
	}
}

5、部署

新建一個javaSE工程,導入jython.jar包。將以上的input.py,my_utils.py和JavaExecutePython類放到同一目錄下:函數

6、測試結果

在JavaExecutePython類編輯界面,右鍵菜單選擇Run as...,選擇Junit Test。執行結果以下: