java如何调用python的.py程序,java能做的python也能做

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • java从文件中读取数据的六种方法是什么,java如何从文件中读取数据
  • java从文件中读取数据的六种方法是什么,java如何从文件中读取数据,java从文件中读取数据的六种方法
  • java 获取当前时间的三种方法是什么,java如何获取当前的时间
  • java 获取当前时间的三种方法是什么,java如何获取当前的时间,java 获取当前时间的三种方法
  • java 实体转map,实体对象转map,Java如何实现实体类转Map、Map转实体类
  • ,,Java如何基于wsimport调用wcf接口
  • javaarraylist用法,java如何遍历arraylist
  • java如何将两个数组合并为一个数组,合并数组算法
  • java如何编写函数,Java方法怎么写
  • java定位系统怎么做,java如何定位线上问题
  • Java如何打包为apk,java如何打包jar包_1
  • 如何判断char是不是空格,java如何判断字符是不是空格
  • java面向对象菜鸟教程,java如何面向对象
  • java如何换行输入,java输出语句中怎么换行
  • 顺时针打印二维数组java,java如何输出一个二维数组
  • 留言与评论(共有 条评论)
       
    验证码: