Python的JAVA胶水——jpype
Python的JAVA胶水——jpype
python可以作为一门胶水语言使用,可以用其它语言的优势来弥补自身如性能方面的不足,jpype就是在Python中使用jvm的第三方库
文档在这里
安装
sudo pip jpype1 #注意后面有一个1,参考官网
配置安装JAVA环境本文就不再赘述
helloworld
- 设置参数启动JAVA虚拟机
- 运行JAVA代码
- 关闭虚拟机
#coding=utf=8
import jpype
jvmPath = jpype.getDefaultJVMPath() # 获得系统的jvm路径
jpype.startJVM(jvmpath=jvmPath) # 启动虚拟机
# 执行JAVA代码
jpype.java.lang.System.out.println("hello world")
jpype.shutdownJVM() # 关闭jvm
-------------------------------------------
hello world
JVM activity report :
classes loaded : 31
JVM has been shutdown
使用Java中的对象
jpype还支持直接使用编译后的class文件,省去了编译这一环节。
一下是原来的JAVA测试代码
package com;
public class JavaClass
{
String value;
public JavaClass(String value)
{
this.value = value+" Java";
}
public String getValue()
{
return this.value;
}
public void say()
{
System.out.println("hello java");
}
public static void main(String[] args) {
System.out.println("hello world");
}
}
编译后产生JAVA字节码
java -cp com com.JavaClass
现在的文件结构如下
./
├── com
│ └── JavaClass.class
└── testJava.py
Python代码如下:
#coding=utf=8
import jpype
jvmPath = jpype.getDefaultJVMPath() # 获得系统的jvm路径
# 启动虚拟机
if not jpype.isJVMStarted():
jpype.startJVM(jvm=jvmPath)
# 使用JAVA字节码中定义的类
javaClass = jpype.JClass('com.JavaClass')
# 实例化对象
javaInstance = javaClass('test')
#调用JAVA对象的方法
print javaInstance.getValue()
javaInstance.say()
# 关闭jvm
jpype.shutdownJVM()
-------------------------------------------
test Java
hello java
JVM activity report :
classes loaded : 20
JVM has been shutdown
添加jar包
原TestApi.java代码
package test;
public class TestApi
{
public String getData(String key){
return key;
}
public void printData(String key){
System.out.println(key);
}
public static void main(String[] args)
{
System.out.println(123);
}
}
打包成jar后可以使用Python来调用
#coding=utf-8
import jpype
jvmPath = jpype.getDefaultJVMPath()
# 用来添加JAVA虚拟机命令行参数
ext_classpath = './TestApi.jar'
jvmArg = '-Djava.class.path=' + ext_classpath
if not jpype.isJVMStarted():
jpype.startJVM(jvmPath, jvmArg)
TA = jpype.JPackage('test').TestApi #这种用法可以简化后面的书写
jd = TA()
jd.printData('1234')
s = jd.getData('a')
print s
system = jpype.java.lang.System #这里也是获得了System
system.out.println("call system method")
jpype.shutdownJVM()
此例中,同时还使用了JAVA虚拟机启动时的命令行参数,可以订制启动方式
小结
jpype提供了强大而灵活的JAVA虚拟机接口,使得Python的扩展性进一步提升,Python的优雅语法,配上JAVA的工程化性能,可以使开发更加高效。
Python的JAVA胶水——jpype的更多相关文章
- python调用java程序--jpype
官方网站:http://jpype.sourceforge.net/ 官方使用文档:http://jpype.sourceforge.net/doc/user-guide/userguide.html ...
- python的java胶水(jpype1)
1.直接使用pip安装jpype1 命令 pip install jpype1 但是,很不幸,提示报错,缺少VC++组件. 2.使用其他方法安装 在 https://www.lfd.uci.edu/ ...
- 使用 jpype 库实现 Python 调用 java 的 jar 包中的功能
一.what's the JPype JPype 是一个能够让 python 代码方便地调用 Java 代码的工具.在某些时候 java 的能力更强,我们可以用 java 写一个模块的功能然后用 Py ...
- python 调 java(胶水就是胶水)
java门外汉用python调java, 一.安装java环境(linux) 1.首先要去下载好JDK,Java SE 8的官方网址是http://www.oracle.com/technetwork ...
- python - jpype模块,python调用java的接口
转载自: http://www.cnblogs.com/junrong624/p/5278457.html https://www.cnblogs.com/fanghao/p/7745356.html ...
- python 调用java脚本的加密(没试过,先记录在此)
http://lemfix.com/topics/344 前言 自动化测试应用越来越多了,尤其是接口自动化测试. 在接口测试数据传递方面,很多公司都会选择对请求数据进行加密处理. 而目前为主,大部分公 ...
- 比Python、Java更快的 Go 语言,能否称霸江湖?
关注之后加星标,江湖要事早知道 文章来源:jb51.net 有一种语言堪称比语言排行榜前五热门选手的Python.Java更快,它就是GO语言. Go于2009年11月正式宣布推出,成为开放源代码 ...
- Python调用Java代码部署及初步使用
Python调用Java代码部署: jpype下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype 下载的时候需要使用Chrome浏览器进行下载 ...
- python调用Java代码,完毕JBPM工作流application
1.缘由 有一庞大Python django webproject,要引入工作流引擎,像OA一样.方便的流程控制与管理.Python或django关于工作流的开源插件,稀少,并且弱爆了,终于选用jav ...
随机推荐
- gotty---用来作为k8s的web terminal,通过参数读取指定pod的日志输出
不要重复造轮子,我觉得这个方案比较适合现在的情况. 我们知道,如果手工查看k8s里指定pod的日志输出,一般的方案如下: kubectl logs -f -n [namespace] [pod] -c ...
- OSGi HelloWorld
1.创建项目 2.Debug Configurations,配好之后,可以点一下右下角的Validate Bundles验证一下是否有问题 3.Debug
- 洛谷---小L和小K的NOIP考后放松赛
链接: https://www.luogu.org/contestnew/show/11805?tdsourcetag=s_pcqq_aiomsg 题解: 没人过的题我就没看 t2: 考虑每个点是朋友 ...
- Python_函数_参数
def 是函数的关键字,Python解释器一旦执行到def,默认不执行 def li(): n = 8 n +=1 print(n) li() li2 = li li2() 结果: 9 9 ret ...
- 卸载impala
1):删除impala rm -rf $(find / -name "*impala*") 2):卸载impala相关依赖 rm -rf $(find / -name " ...
- net core体系-web应用程序-4net core2.0大白话带你入门-8asp.net core 内置DI容器(DependencyInjection,控制翻转)的一点小理解
asp.net core 内置DI容器的一点小理解 DI容器本质上是一个工厂,负责提供向它请求的类型的实例. .net core内置了一个轻量级的DI容器,方便开发人员面向接口编程和依赖倒置(IO ...
- UOJ#62. 【UR #5】怎样跑得更快 数论 莫比乌斯反演
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ62.html 题解 太久没更博客了,该拯救我的博客了. $$\sum_{1\leq j \leq n} \ ...
- BZOJ4556 [Tjoi2016&Heoi2016]字符串 SA ST表 二分答案 主席树
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4556.html 题目传送门 - BZOJ4556 题意 给定一个长度为 $n$ 的字符串 $s$ . ...
- 配置maven从自己的私服下载jar包nexus、maven私服仓库(二)
配置maven项目从私服下载jar包 pom文件配置从maven私服下载jar包 settings文件配置从maven私服下载jar包 (方便自己关键字搜索,所以多写了几行o(* ̄︶ ̄*)o) 今天自 ...
- Http和RPC区别
本文转自:https://blog.csdn.net/mou_it/article/details/79873612 RPC(即Remote Procedure Call,远程过程调用)和HTTP(H ...