Jython(原 JPython ),可以理解为一个由 Java 语言编写的 Python 解释器。
要使用 Jython, 只需要将 Jython-x.x.x.jar 文件置于 classpath 中即可 --> 官网下载,百度网盘。
当然,通过 Maven 导入也 OK
import org.python.util.PythonInterpreter;
public class HelloPython {
public static void main(String[] args) {
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("print('hello')");
}
}
interpreter.execfile("D:/labs/mytest/hello.py");
如上,将 exec 改为 execfile 就可以了。需要注意的是,这个 .py 文件不能含有第三方模块,因为这个“ Python 脚本”最终还是在 JVM 环境下执行的(而非依赖于本地计算机环境),如果 .py 程序中有用到第三方模块(例如 NumPy)将会报错:java ImportError: No module named xxx
但是实际中,我们即使引入了Jytho-jar还是会报错
出现如下错误:
请点击此处输入图片描述
在main方法中加入以下代码重构
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]);
package com.aidongsports.test;
import org.python.util.PythonInterpreter;
import java.util.Properties;
/**
* Created by HONGLINCHEN on 2017/12/11 11:15
* 测试java调用python
* @author HONGLINCHEN
* @since JDK 1.8
*/
public class TestPython {
public static void main(String[] args) {
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();
/*在 JVM 中执行 Python 语句*/
interpreter.exec("print('hello')");
/*在 JVM 中执行 Python 脚本,这个 .py 文件不能含有第三方模块*/
interpreter.execfile("E:\\TortoiseSVN\\trunk\\lovesports\\src\\main\\java\\com\\aidongsports\\test\\index.py");
}
}
index.py代码:
#!C:\Program Files\Python35 # coding=utf-8 a = input("Press the enter key to exit.\n\n") # 将input方法返回的字符串转成int类型 a = int(a) # 第二个注释 if a <= 60: print("成绩不及格") # 缩进4行,要是4的倍数 elif a == 60: print("成绩及格") elif a == 70: print("成绩一般") elif a == 90: print("成绩优秀") ''' print("Hello, Python!") '''