本文介绍java调用python脚本文件,通过jython调用,通过实战案例介绍,直接调用python脚本文件方法和类对象。依赖jar版本jython-2.7.0.jar
python脚本文件:
#!/usr/bin/env python
# coding:utf-8
'''
Created on 2018年10月15日
@author: lzw
'''
class JavaPython(object):
'''
python 类
'''
def __init__(self, desc):
self.desc = desc
def outprint(self,info):
return "%s:%s" % (self.desc,info)
def add(a,b):
return a + b
java代码:
- java环境类
package com.sinoiov.python;
import java.util.Properties;
import org.python.core.PySystemState;
import org.python.util.PythonInterpreter;
public final class JythonEnvironment {
private static JythonEnvironment INSTANCE = new JythonEnvironment();
private JythonEnvironment() {
}
public static JythonEnvironment getInstance() {
return INSTANCE;
}
public PySystemState getPySystemState() {
Properties props = new Properties();
props.put("python.home", "path to the Lib folder");
props.put("python.console.encoding", "UTF-8");
props.put("python.security.respectJavaAccessibility", "false");
props.put("python.import.site", "false");
Properties preprops = System.getProperties();
PySystemState.initialize(preprops,props, new String[0]);
final PySystemState py = new PySystemState();
py.setClassLoader(getClass().getClassLoader());
return py;
}
/**
* 获取python解释器
* @return PythonInterpreter
*/
public PythonInterpreter getPythonInterpreter() {
PythonInterpreter inter = new PythonInterpreter(null, getPySystemState());
return inter;
}
}
- 测试调用类
package com.sinoiov.python;
import org.python.core.Py;
import org.python.core.PyFunction;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter;
public class JavaPython {
public static void main(String[] args) {
// TODO Auto-generated method stub
JavaPython jp = new JavaPython();
jp.run();
}
public void run() {
// 获取python解释器
final PythonInterpreter inter = JythonEnvironment.getInstance().getPythonInterpreter();
// 解析python脚本文件
inter.execfile("javapython.py");
// 调用脚本文件方法
// 调用方法
PyFunction py = (PyFunction)inter.get("add",PyFunction.class);
PyObject po = py.__call__(new PyInteger(3),new PyInteger(5));
System.out.println( "3 + 2 ="+ po);
// 调用类对象方法
PyObject pyObject = (PyObject)inter.get("JavaPython", PyObject.class);
// 初始化python类对象
PyObject javaPythonObj = pyObject.__call__(Py.newStringOrUnicode("调用python"));
// 反射调用对象outprint方法
PyObject value = javaPythonObj.invoke("outprint",Py.newStringOrUnicode("调用成功"));
System.out.println(value.asString());
}
}
- 测试结果
3 + 2 =8
调用python:调用成功