jpython的使用(Java调用python脚本)
2017-09-02 本文已影响4455人
旋哥
1、导入Jar
找到jython-installer-2.7.0.jar 包里面的jpython.jar,加载到工作目录
我用的java开发工具是IDEA、JDK8、Python3.5
2 、执行python源码
获取一个元组里面的元素
import org.python.util.PythonInterpreter;
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
}
一般会出现以下异常
Exception in thread "main" ImportError: Cannot import site module and its dependencies: No module named site
Determine if the following attributes are correct:
* sys.path: ['C:\\Users\\Administrator\\IdeaProjects\\MyText\\lib\\Lib', '__classpath__', '__pyclasspath__/']
This attribute might be including the wrong directories, such as from CPython
* sys.prefix: C:\Users\Administrator\IdeaProjects\MyText\lib
This attribute is set by the system property python.home, although it can
be often automatically determined by the location of the Jython jar file
You can use the -S option or python.import.site=false to not import the site module
看错误可以理解为一些库的路径错误,下面也给出了解决方法
我们只需要吧代码改为以下这个例子就可以顺利执行了。
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();
PythonInterpreter.initialize(preprops, props, new String[0]);
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); ");
interpreter.exec("print days[1];");
执行结果是Tue
3、调用.py中的方法
test.py的源码
def add(a, b):
return a + b
Java源码
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();
PythonInterpreter.initialize(preprops, props, new String[0]);
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("test.py");
PyFunction func = (PyFunction) interpreter.get("adder",
PyFunction.class);
int a = 100, b = 100;
PyObject pyobj = func.__call__(new PyInteger(a), new PyInteger(b));
System.out.println("anwser = " + pyobj.toString());
执行结果为 200
4、执行 .py文件
test.py
# -*- coding: utf-8 -*
print ("hello")
ls = [1,2,3,4,5,6]
print(ls)
print('你好')
java代码
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();
PythonInterpreter.initialize(preprops, props, new String[0]);
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("test.py");
执行结果:
hello
[1, 2, 3, 4, 5, 6]
你好
如果报出如下异常,请在源码加上
# -- coding: utf-8 -
Exception in thread "main" SyntaxError: Non-ASCII character in file