java如何调用python的.py程序,java能做的python也能做
如何使用Java调用Python程序
本文介绍java如何调用python方法,供大家参考。
在实际项目中,可能会结合使用Java和python,这就涉及到一个问题,就是如何用Java程序调用写好的python脚本。有三种实现方式。具体方法为您介绍:
1. 在java类中直接执行python语句
这个方法需要参考org.python包,下载Jpython。这里先介绍一下Jpython。以下解释引自百科全书:
Jython是一种完整的语言,不是Java翻译器或者仅仅是Python编译器。它是Python语言在Java中的完整实现。Jython也有很多继承自CPython的模块库。最有趣的是,与CPython或任何其他高级语言不同,Jython提供了对其实现语言的所有访问。所以Jython不仅给你提供了Python的库,还提供了所有的Java类。这使得它拥有巨大的资源池。
在这里,我建议下载最新版本的Jpython,因为会有比旧版本更多的python函数库可用。目前,最新版本是2.7。
单击download jython 2 . 7 . 0-standalone jar下载jar包。
要下载安装程序,请单击下载Jython 2 . 7 . 0-安装程序。
如果使用maven依赖项来添加,请使用以下语句:
属国
groupIdorg.python/groupId
artifactId jython-独立/artifactId
版本2 . 7 . 0/版本
/dependency上面已经准备好了,可以直接用java类写python语句了。具体代码如下:
python interpreterprinterpreter=newpython interpreter();
interpreter.exec(a=[5,2,3,9,4,0];);
interpreter . exec( print(sorted(a)););//python语句这里是3.x版本的语法。
interpreter . exec( print sorted(a););//这里的python语句是2.x版,语法输出结果如下:
这里你会看到输出结果都是一样的,也就是说Jpython兼容python2.x和3.x版本的语句,运行速度会比直接运行python程序略慢。
相关:《Python教程》
但每次运行结果时,控制台都会提示3360未能安装 3360 Java . nio . charset . unsupported charset exception 3360 CP 0。这看起来很烦,因为每次运行结果都会出现红色提示语句,以为是错误。程序员应该不希望看到这种场景,所以要想办法解决。
解决方案如下:
右键单击要执行的代码,运行AsRun配置,选择第二个选项卡参数,并在VM参数中添加以下语句
-d python . console . encoding=UTF-8,然后应用-运行。
如下图所示:
2. 在java中调用本地python脚本
首先在本地构建一个python脚本,命名为add.py,并编写一个简单的两个数相加的函数。代码如下:
defadd(a,b):
returna bpython的函数已经写好了。接下来,我们写一个java测试类(也需要使用Jpython包)来测试一下是否能成功运行。代码如下:
进口nb
sp;org.python.core.PyFunction;
importorg.python.core.PyInteger;
importorg.python.core.PyObject;
importorg.python.util.PythonInterpreter;
publicclassJava_Python_test{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
PythonInterpreterinterpreter=newPythonInterpreter();
interpreter.execfile("D:\add.py");
//第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型
PyFunctionpyFunction=interpreter.get("add",PyFunction.class);
inta=5,b=10;
//调用函数,如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型”
PyObjectpyobj=pyFunction.__call__(newPyInteger(a),newPyInteger(b));
System.out.println("theanwseris:"+pyobj);
}
}运行结果如图所示:
注意:以上两个方法虽然都可以调用python程序,但是使用Jpython调用的python库不是很多,如果你用以上两个方法调用,而python的程序中使用到第三方库,这时就会报错java ImportError: No module named xxx。遇到这种情况推荐使用下面的方法,即可解决该问题。
3. 使用Runtime.getRuntime()执行脚本文件(推荐)
为了验证该方法可以运行含有python第三方库的程序,我们先写一个简单的python脚本,代码如下:
importnumpyasnp
可以看到程序中用到了numpy第三方库,并初始化了一个3×4的一个矩阵。
下面来看看怎么用Runtime.getRuntime()方法来调用python程序并输出该结果,java代码如下:
importjava.io.BufferedReader;
输出的结果如下图所示:
可以看到运行成功了,但有的朋友可能会问了,怎么在python程序中函数传递参数并执行出结果,下面我就举一例来说明一下。
先写一个python的程序,代码如下:
importsys
其中sys.argv用于获取参数url1,url2等。而sys.argv[0]代表python程序名,所以列表从1开始读取参数。
以上代码实现一个两个数做加法的程序,下面看看在java中怎么传递函数参数,代码如下:
inta=18;
其中args是String[] { “python”,path,url1,url2 }; ,path是python程序所在的路径,url1是参数1,url2是参数2,以此类推。
最后结果如图所示:
OK,成功了。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。