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