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的工程化性能,可以使開發更加高效。