Java调用Python脚本,以及报错解决
2017-12-11 11:35
525 查看
极少数时候,我们会碰到类似这样的问题:与 A 同学合作写代码, A 同学只会写 Python,而不熟悉 Java,而你只会写 Java 并不擅长 Python,并且发现难以用 Java 来重写对方的代码,这时,就不得不想方设法“调用对方的代码”。下面举一些简单的小例子,借此说明:如何在 Java 中调用 Python 代码。
什么是 Jython?
Jython(原 JPython ),可以理解为一个由 Java 语言编写的 Python 解释器。要使用 Jython, 只需要将 Jython-x.x.x.jar 文件置于 classpath 中即可 --> 官网下载,百度网盘。
当然,通过 Maven 导入也 OK
<dependency><groupId>org.python</groupId> <artifactId>jython-standalone</artifactId> <version>2.7.0</version>
</dependency>
一个 HelloPython 程序,在java中执行Python语句
import org.python.util.PythonInterpreter;public class HelloPython {
public static void main(String[] args) {
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("print('hello')");
}
}
什么是 PythonInterpreter 呢?它的中文意思即“ Python 解释器”。我们知道 Python 程序都是通过解释器执行的,上面的代码就是在 JVM 中创建一个“ Python 解释器”对象,模拟 Python 解释器的行为,通过 exec(" Python 语句") 直接在 JVM 中执行 Python 代码,上面代码的输出结果为:hello,需要提醒各位的是,该程序运行速度相较正常的 Java or Python 程序都要慢那么一点。
在 JVM 中执行 Python 脚本
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!")
'''
相关文章推荐
- Java调用shell脚本遭遇的问题以及解决办法
- selenium python脚本调用java script 报Message: u'$ is not defined' ; Stacktrace 的解决历程
- Java调用Python脚本
- Java调用Python脚本
- Linux下,将python安装在个人目录下,配置环境变量,以及解决crontab执行python脚本会出错的问题
- java调用js脚本,以及js脚本调用java方法
- java调用python脚本方法
- 在Java中执行脚本命令以及调用外部程序说明
- java 调用python,shell脚本
- Java程序中调用Python脚本的方法
- Linux(centos 6.5) 调用java脚本以及定时执行的脚本实例及配置文件详解
- Java调用Python脚本
- python自动补全以及自带脚本运行失败解决方法
- scrapy一些非常实用资料整理,与其他mongdb、django、redis、solr、tor结合使用以及用Python脚本调用等等方法
- Java中Process和Runtime()使用,以及调用cmd命令阻塞在process.waitfor( )的问题解决
- shell脚本以及java调用shell并传参
- java 调用bash shell脚本阻塞的小问题的解决
- java直接调用python脚本的例子
- Java代码中调用shell脚本和python脚本并获得输出结果(分为小数据量和大数据量)
- java直接调用python脚本的例子