Python -- jpype JVM的第三方库使用

Python -- jpype  

 

安装 jpype 

 

如图:直接执行 命令:pip install jpype 可见失败,提示没有版本信息

可以使用 pip  search jpype 查看相关版本信息

使用命令 pip install JPype1  进行安装、

 

 安装失败,如下图

 

 解决办法,

1、到指定的网址下载对应的软件安装即可

2、直接下载库文件安装, 推荐在:(python库下载地址(库很丰富,下载速度也很快):http://www.lfd.uci.edu/~gohlke/pythonlibs

 

 

安装方式:cd 到文件所在路径,然后执行 命令 pip install 文件名 具体如下:

 

启动 Java 虚拟机

并执行简单java程序

如下代码:

# FileName : JpypeDemo.py
# Author   : Adil
# DateTime : 2018/4/12 17:40
# SoftWare : PyCharm

import jpype

from time import *

# 获取虚拟机路径
jvmPath = jpype.getDefaultJVMPath()
# jpath = r'D:\SProgram\Java\Jdk8\jre\bin\server\jvm.dll'

# 可见 获取jvmPath 与 jpath 一样。
print(jvmPath)  # D:\SProgram\Java\Jdk8\jre\bin\server\jvm.dll

# 启动虚拟机
jpype.startJVM(jvmPath)
# 判断虚拟机是否启动
print(jpype.isJVMStarted())
# 调用java程序,执行打印
jpype.java.lang.System.out.println("hello JPype !")
# 关闭虚拟机
jpype.shutdownJVM()
sleep(5)
print(jpype.isJVMStarted())

 

使用java 中的对象

jpype还支持直接使用编译后的class文件,省去了编译这一环节。

以下是原来的JAVA测试代码

package com;
public class JavaDemo
{
    String value;
    public JavaDemo(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 编译命令  在当前路径下进行编译,生成class 文件,执行 javac  ***.java

 

 python 使用class 文件代码

# FileName : jpype.py
# Author   : Adil
# DateTime : 2018/4/12 19:16
# SoftWare : PyCharm

import jpype

jvmPath = jpype.getDefaultJVMPath() # 获得系统的jvm路径
# 启动虚拟机
if not jpype.isJVMStarted():
    jpype.startJVM(jvm=jvmPath)
# 使用JAVA字节码中定义的类,注意包名
javaClass = jpype.JClass('com.JavaDemo')
# 实例化对象
javaInstance = javaClass('test')
#调用JAVA对象的方法
print (javaInstance.getValue())
javaInstance.say()

# 关闭jvm
jpype.shutdownJVM()

 

 python 引入jar包,代码如下:

# FileName : GetMd5.py
# Author   : Adil
# DateTime : 2018/4/12 20:28
# SoftWare : PyCharm

import os.path
import jpype

class Md5(object):

    def __init__(self):

        self.jvmPath = jpype.getDefaultJVMPath()
        self.fileDir = os.path.realpath(__file__)
        # 获取 jar包路径
        self.jarPath = os.path.split(self.fileDir)[0] + r'\jmeter-md5.jar'
        print(self.jarPath)
        # 拼接 执行jar 包的路径
        self.exejar = '-Djava.class.path=' + self.jarPath


    def getMd5(self,md):
        
        # 启动 jvm 并执行jar 包
        jpype.startJVM(self.jvmPath,self.exejar)
        # 实例化 改jar包中的类
        JDClass = jpype.JClass("com.jmeter.md5.GenerateMd5")
        # jprint = jpype.java.lang.System.out.println
        # 使用改类的方法
        md5 = JDClass.createMD5(md)
        # jprint ('5555')
        # 关闭虚拟机
        jpype.shutdownJVM()
        return md5

 

此例中,同时还使用了JAVA虚拟机启动时的命令行参数,可以订制启动方式

 

 

总之

jpype提供了强大而灵活的JAVA虚拟机接口,使得Python的扩展性进一步提升,Python的优雅语法,配上JAVA的工程化性能,可以使开发更加高效。

 

posted @ 2018-04-13 17:08  Blue·Sky  阅读(7506)  评论(0编辑  收藏  举报