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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值