Python的JAVA胶水——jpype
python可以作为一门胶水语言使用,可以用其它语言的优势来弥补自身如性能方面的不足,jpype就是在Python中使用jvm的第三方库
文档在这里
安装
sudo pip jpype1 #注意后面有一个1,参考官网
配置安装JAVA环境本文就不再赘述
helloworld
设置参数启动JAVA虚拟机
运行JAVA代码
关闭虚拟机
#coding=utf=8import jpype jvmPath = jpype.getDefaultJVMPath() # 获得系统的jvm路径jpype.startJVM(jvm=jvmPath) # 启动虚拟机# 执行JAVA代码jpype.java.lang.System.out.println("hello world") jpype.shutdownJVM() # 关闭jvm-------------------------------------------hello world JVM activity report : classes loaded : 31JVM 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=8import 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()# 关闭jvmjpype.shutdownJVM()-------------------------------------------test Java hello java JVM activity report : classes loaded : 20JVM 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-8import jpype jvmPath = jpype.getDefaultJVMPath()# 用来添加JAVA虚拟机命令行参数ext_classpath = './TestApi.jar'jvmArg = '-Djava.class.path=' + ext_classpathif 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的工程化性能,可以使开发更加高效。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦