首页投稿(暂停使用,暂停投稿)Python 运维Python语言与信息数据获取和机器学习

jpython的使用(Java调用python脚本)

2017-09-02  本文已影响4455人  旋哥

1、导入Jar

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
上一篇下一篇

猜你喜欢

热点阅读