1、本地环境安装的是Python 2.7.11

2、用maven下载jython依赖

<pre name="code" class="html"><dependency>
    <groupId>org.python</groupId>
    <artifactId>jython</artifactId>
    <version>2.7.0</version>
</dependency>
 
 
 
3、python脚本编写 
 
#coding:utf-8

def adder(a, b):  
   return a + b 

def mytest(str2):
    print str2
    return 'call success !!!'

 
4、Java调用Python 
<pre name="code" class="java">package test1;

import java.util.Properties;

import org.python.core.PyFunction;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.core.PyString;
import org.python.util.PythonInterpreter;

public class Java2Python {
	public static void main(String args[]) {
		Properties props = new Properties();
		props.put("python.home","D:/Python27/Lib");
		props.put("python.console.encoding", "UTF-8"); // Used to prevent: console: Failed to install '': java.nio.charset.UnsupportedCharsetException: cp0.
		props.put("python.security.respectJavaAccessibility", "false"); //don't respect java accessibility, so that we can access protected members on subclasses
		props.put("python.import.site","false");
		Properties preprops = System.getProperties();
		PythonInterpreter.initialize(preprops, props, new String[0]);
		
		PythonInterpreter interpreter = new PythonInterpreter();

		interpreter.execfile("E:/workspace3/test1/src/main/java/test1/my_utils.py");
		PyFunction adder = (PyFunction) interpreter.get("adder", PyFunction.class);

		int a = 30, b = 50;
		PyObject pyobj = adder.__call__(new PyInteger(a), new PyInteger(b));
		System.out.println("anwser = " + pyobj.toString());
		PyFunction mytest = (PyFunction) interpreter.get("mytest", PyFunction.class);
		PyObject pyobj2 = mytest.__call__(new PyString("this is java project!!!"));
		System.out.println(pyobj2.toString());
		interpreter.close();

	}
}
 

以上方式可以实现Java调用Python,但是在python 脚本中只能有python的原生api,如果在在脚本中有引入pandas,numpy之类的第三方扩展包,还是会是会找不到,这个问题正在查找是什么原因..





Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐