java调用python包
Jython(原JPython),是一个用Java语言写的Python解释器。
在没有第三方模块的情况下,通常选择利用Jython来调用Python代码,
它是一个开源的JAR包,你可以到官网下载
一个HelloPython程序
importorg.python.util.PythonInterpreter;
publicclassHelloPython{
publicstaticvoidmain(String[]args){
PythonInterpreterinterpreter=newPythonInterpreter();
interpreter.exec("print('hello')");
}
}
什么是PythonInterpreter?它的中文意思即是“Python解释器”。我们知道Python程序都是通过解释器来执行的,我们在Java中创建一个“解释器”对象,模拟Python解释器的行为,通过exec("Python语句")直接在JVM中执行Python代码,上面代码的输出结果为:hello
在Jvm中执行Python脚本
interpreter.execfile("D:/labs/mytest/hello.py");
如上,将exec改为execfile就可以了。需要注意的是,这个.py文件不能含有第三方模块,因为这个“Python脚本”最终还是在JVM环境下执行的,如果有第三方模块将会报错:javaImportError:Nomolenamedxxx
仅在Java中调用Python编写的函数
先完成一个hello.py代码:
defhello():
return'Hello'
在Java代码中调用这个函数:
importorg.python.core.PyFunction;
importorg.python.core.PyObject;
importorg.python.util.PythonInterpreter;
publicclassHelloPython{
publicstaticvoidmain(String[]args){
PythonInterpreterinterpreter=newPythonInterpreter();
interpreter.execfile("D:/labs/hello.py");
PyFunctionpyFunction=interpreter.get("hello",PyFunction.class);//第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型
PyObjectpyObject=pyFunction.__call__();//调用函数
System.out.println(pyObject);
}
}
上面的代码执行结果为:Hello
即便只是调用一个函数,也必须先加载这个.py文件,之后再通过Jython包中所定义的类获取、调用这个函数。
如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型”,例如:
__call__(newPyInteger(a),newPyInteger(b))
a,b的类型为Java中的int型,还有诸如:PyString(Stringstring)、PyList(Iterator
2. 怎么使用java运行python脚本
引用 org.python包
1 PythonInterpreter interpreter = new PythonInterpreter();
2 interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); "); ///执行python脚本
2. 执行python .py文件
1 PythonInterpreter interpreter = new PythonInterpreter();
2 InputStream filepy = new FileInputStream("D:\\demo.py");
3 interpreter.execfile(filepy); ///执行python py文件
4 filepy.close();
3. 使用Runtime.getRuntime()执行脚本文件
这种方式和.net下面调用cmd执行命令的方式类似。如果执行的python脚本有引用第三方包的,建议使用此种方式。使用上面两种方式会报错java ImportError: No mole named arcpy。
1 Process proc = Runtime.getRuntime().exec("python D:\\demo.py");
2 proc.waitFor();
本回答由电脑网络分类达人 朱冬梅推荐
评论
1 0
瓶邪
采纳率:92% 来自团队:网络知道电脑团 擅长: 电脑/网络 生活 电子数码
其他回答
如果是jython,也就是运行在Jvm上的python的话,可以使用JSR223,JDK1.6已经包含了该扩展包。JSR223是一个用于解析多种脚本语言的库包,其中包括Jython。除了JSR223包之外,还需要jython-engine.jar包。
ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");
try
{
engine.eval(new FileReader("./script/listing.py"));
}
catch(ScriptException se)
{
}
catch(IOException ie)
{
}
3. Java如何调用Python的jar包
Python -> Native 代码 整体思路 先将Python 源代码转换成 C 代码,之后用 GCC 编译 C 代码为二进制模块 so/dll,接着进行一次 Java Native 接口封装,
4. java调用python问题
这是因为你jython的版本和你linux上装的python的版本是不一致的。你可以看下jython的版本说明。
jython是用java代码实现的python。你使用的jython这个版本系统库可能真的没有包含logging这个mole。
5. java怎么点用python脚本
首先得声明一下,java是java,python是python,你用java得环境跑python这不是找麻烦吗,但是并不是说不行,java有一个Jpython得库,你可以下载一下,这方面原理设计jni技术,建议了解一下,如果单纯想运行一个脚本可以找Jpython得api文档看看
6. 用java执行python
1.直接执行Python脚本代码
引用 org.python包
1 PythonInterpreter interpreter = new PythonInterpreter();
2 interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); "); ///执行python脚本
2. 执行python .py文件
1 PythonInterpreter interpreter = new PythonInterpreter();
2 InputStream filepy = new FileInputStream("D:\\demo.py");
3 interpreter.execfile(filepy); ///执行python py文件
4 filepy.close();
3. 使用Runtime.getRuntime()执行脚本文件
这种方式和.net下面调用cmd执行命令的方式类似。如果执行的python脚本有引用第三方包的,建议使用此种方式。使用上面两种方式会报错java ImportError: No mole named arcpy。
1 Process proc = Runtime.getRuntime().exec("python D:\\demo.py");
2 proc.waitFor();
7. eclipse中 java程序怎样调用python
eclipse中 java程序调用python方法如下:
package com.lyz.test.jython;
import org.python.util.PythonInterpreter;
/**
* 第一个Jython程序
* @author liuyazhuang
*
*/
public class FirstJythonScript {
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];");
}
}
8. Java中如何让使用Python的统计包绘图
看来是同道。你提到的这个问题很难。
java调用python容易。 java甚至可以直接调用python的类。python调用java更容易了。
不过GUI要想融合,据目前20年的技术来看,只有本土的可以。 比如以前的微软件ActiveX,不管你是什么语言开发的都可以在windows下用OLE方式嵌入。
java的制图功能,因为它的设计理念 ,它是封闭的。也就是说,除非你使用了它本地化的GUI方法,否则就不可能实现。
那么说,如果我一定要实现怎么办呢?只能走很长的弯路。方法还是有几个的。
方法1:
在java的panel里嵌入一个浏览器,然后在浏览器里显示统计图表。这个真是不要太容易了。 不管是你是python生成的本地图片,还是直接用javascript生成的图都可以嵌入进去。美观不用说
方法2:
绘图使用开源的,比如plt之类的。不过它被本地化成java版本的。然后用java调用python,再用python产生数据后,通过jython调用java本地化的绘图工具。
表面上看,这个东西就是没有价值的,为什么不直接用java调用绘图。关键在于python本身对于数据处理的优势太明显。轻松就可以完成复杂的数据结构处理。所以还是有价值的
方法3:
浮动窗口方式。这个就不说了。如果你的java是固定在窗口特定位置的。这个就容易了。怎么浮动窗口要根据操作系统而定。
方法4:简单方案
python生成图片后,输出成JPEG或者是PNG或者是GIF,然后让JAVA显示这个图片。这个可能是最最简单的。
方法5:windows专用,不知道可否使用
仅限于特定场景,在要显示图片的地方,显示一个品红色的纯色图。然后让python的图形输出转到directshow之类的API,直接写显卡。这样就可以显示动画效果。