javascript调用python,java调取python

  javascript调用python,java调取python

  本文主要讲用Java调用Javascript和Python算法,有一定的参考价值。感兴趣的朋友可以了解一下。

  最近Javascript或者Python中的算法需要在项目中作为服务发布,而发布Tomcat服务需要在Java中调用这些算法,所以跨语言调用算法是必然的。无论是调用Javascript文件还是python脚本,都需要对原有的算法文件进行适当的修改,这样才能将参数传入Java,得到算法结果。

  1.Java调用Javascript

  需要注意的是,Javascript是一种弱类型语言,定义变量只需要一个var。但是在Java中要注意变量的类型,不同的输入参数会有不同的类型。

  在调用js文件时,需要进行调整,设置需要调用的函数和相关参数。使用的js文件代码如下(部分核心算法无法展示):

  函数get3DCode(纬度,经度,高度,级别){

  var latcode=[];var LNG code=[];

  latcode=GeoSOTCode1D(纬度,水平);

  lngcode=GeoSOTCode1D(经度,级别);

  var heicode=[];var geosot 3d code=[];

  heicode=Altcode(高度,水平);

  geosot3Dcode=GeoSOT3D(latcode,lngcode,heicode,level);//3D网格编码

  var D3 code=[];

  D3 code=getQuantcodeString(geosot 3d code);

  返回d3code

  }在Java中使用相应的接口就可以调用。您需要设置js文件路径和输入参数。调用代码如下:

  包whu.get.three .北斗;

  导入Java . io . filereader;

  导入javax . script . invokable;

  导入javax . script . script engine;

  导入javax . script . script engine manager;

  /** * Java调用并执行js文件,传递参数,获取返回值*/

  公共类ThreeD_GetBeidouCode {

  //获取经纬度和高度,返回3D代码。

  公共静态字符串main(字符串纬度、字符串经度、字符串高度、int CodeSize)引发异常{

  //获取经纬度和高度,保存为double类型。

  double Latitude=double . parse double(纬度);

  Double经度=Double.parseDouble(经度);

  double Height=double . parse double(Height);

  int level=CodeSize

  //调用js文件

  script engine manager manager=new script engine manager();

  script engine engine=manager . getenginebyname( JavaScript );

  string js filename=system . getproperty( catalina . home )/WEB apps/3 dbeidoucode/we b-INF/classes/3d code . js ;//读取js文件

  FileReader reader=new FileReader(jsFileName);//执行指定的脚本

  engine . eval(reader);

  字符串c=“”;

  if(可调用的引擎实例){

  invokable invoke=(invokable)引擎;//调用merge方法并传入两个参数

  c=string . value of(invoke . invoke function( get 3d code ,纬度,经度,高度,级别));

  }

  reader . close();

  返回c;//返回三维码

  }

  }这里的ThreeD_GetBeidouCode类只是一个普通的类。需要在其他runnable main函数中调用这个类的main方法,传入运行参数就可以得到结果。

  第二,Java调用Python

  调用Java python脚本有几种方法。最简单的方法是直接通过Jython运行python代码,但是这种方法不支持python中引用的第三方库。所以我用Runtime调用的方法,相当于在控制台上执行脚本。

  注意,Java调用python时,不能通过return语句获取返回值,只能通过print将结果写入标准输出流,然后在Java中通过标准输入流读取返回的结果。

  如果对python环境有要求,比如安装需要在特定环境下引用的第三方库,也需要在Java项目中添加运行环境。在eclipse中点击运行-运行配置-环境添加路径,值设置为python安装的路径。

  在大蟒程序中做适当修改:添加引用导入系统,将调用的函数参数设定为sys.argv[1],sys.argv[2].注意必须是从一开始计数,将需要返回的结果用打印函数打印。

  本例中大蟒代码如下:

  # -*-编码:utf-8 -*-

  导入基本函数

  将数组作为铭牌导入

  导入循环器

  导入数学

  导入系统

  #计算中心要素

  定义校准中心特征(路径,x,y):

  sf=BaseFunction.open_shpfile(路径)

  x _ records=基函数。获取属性记录(SF,x)

  y _ records=基本函数。get _ attr _ records(SF,y)

  dis=[]

  对于活力中的x0,y0(x _记录,y _记录):

  距离=0

  对于活力中的x1,y1(x _记录,y _记录):

  distance=distance get _ distance(x0,y0,x1,y1)

  距离附加

  我=疾病指数(np.min(dis))

  结果=[x _记录[i],y _记录[我]]

  回送结果

  #计算两点之间的距离

  def get_distance(x0,y0,x1,y1):

  xd=x1 - x0

  yd=y1 - y0

  distance=math.sqrt(xd**2 yd**2)

  返回距离

  if __name__==__main__ :

  result=cal _ central _ feature(sys。argv[1],sys.argv[2],sys.argv[3])

  打印(结果[0])

  打印(结果[1])Java中调用的代码如下:

  包whu.get .三。北斗;

  导入Java。io。缓冲阅读器;

  导入Java。io。inputstreamreader

  /** * Java调用并执行射流研究…文件,传递参数,并活动返回值*/

  公共类CalCentralFeatureClass {

  //输入自行榴弹炮(自行榴弹炮)路径,获取坐标

  公共静态字符串主(字符串文件路径){

  string pyPath=system。getproperty( catalina。home )/WEB apps/cal central feature/we b-INF/classes/cal central feature。py ;//python文件路径

  String[]args=new String[]{ python ,pyPath,filepath, x , y };

  字符串c=//记录返回值

  尝试{

  Process proc=Runtime.getRuntime().exec(args);//执行巴拉圭文件

  缓冲读取器in=新缓冲读取器(新InputStreamReader(proc。getinputstream()));

  字符串行=空

  while ((line=in.readLine())!=null) {

  c=c行"";

  }

  英寸close();

  继续。等待();

  } catch(异常e) {

  e。printstacktrace();

  }

  返回c;//返回结果

  }

  }得到的运算结果中,每一个大蟒中打印的结果,对应一个in.readLine(),可以按照需要获取自己想要的结果。

  如果需要将调用大蟒的程序用雄猫发布为服务,也需要配置雄猫的运行环境,同样是添加一个路径,赋值为大蟒安装路径。

  相关教程:Java视频教程以上就是爪哇怎样调用Javascript、Python算法的详细内容,更多请关注我们其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: