在python程式中呼叫java程式碼
Python 是一門 “膠水”語言,非常靈活多變,但是在一些特殊的時候,也需要呼叫其它語言來協助實現更多的功能;在公司使用python進行 介面測試 的時候,會遇到有些介面資料是由公司的開發人員進行自定義的加密演算法進行加密的,此時,要開發告訴加密程式碼是不太可能的。跟開發小哥溝通時,很多時候都是由他給一個 jar包,然後剩下的就由測試人員來發揮了。
那 python 該如何使用這個jar包呢?
這裡給大家介紹的是 jpype;
一、什麼是 Jpype
JPype是一個能夠讓 python 程式碼方便地呼叫 Java 程式碼的工具;
二、安裝 Jpype
pip install jpype1 (注意:是jpype1哦,這個1請一定不要忘記)
三、 Jpype的使用流程
Jpype是給python程式設計師來使用的。他能呼叫啟jar包,其實還是要去啟用jvm來對java程式碼進行執行;所以請確保你的jdk正確安裝並配置好環境變數。
基本流程:
①、使用jpype開啟jvm
②、載入java類
③、呼叫java方法
④、關閉jvm(不是真正意義上的關閉,解除安裝之前載入的類)
舉例說明:
1、先寫好java程式碼,並生成jar包;
package com.pyjava.demo;
public class Demo1 {
public int add(int a ,int b) {
return a+b;
}
}
匯出成jar包:pyjava.jar
2、使用Jpype程式碼:
import jpype
import os
jarpath = os.path.join(os.path.abspath('.'), '//Users//luoman//file//pyjava.jar') #定義變數引用jar包的路徑
# 1、開啟jvm
jvmpath = jpype.get_default_jvm_path() #獲取jvm的路徑,一般情況下由此函式獲取就可以
jpype.startJVM(jvmpath, "-ea", "-Djava.class.path=%s" % (jarpath)) # 使用startJvm()函式 啟動jvm
# 2、載入java類
javaclass = jpype.JClass("com.pyjava.demo.Demo1") # 此處要寫長類名(包名.類名)
# 3、呼叫java方法
jc = javaclass() #定義java物件
sum = jc.add(3,4) #呼叫jar包中的函式
print('兩數之和為:',sum)
# 4、關閉jvm
jpype.shutdownJVM()
執行結果:兩數之和為:7
也可以直接呼叫java的api,比如呼叫java的標準輸出語句:
java.lang.System.out.println("helloworld")
四、startJVM() 函式詳細說明
startJVM() 函式的作用是啟動 JAVA 虛擬機器
jpype.startJVM() 的定義
startJVM(jvm, *args)
引數說明:
jvm:描述你係統中 jvm.dll 檔案所在的路徑,可以直接使用get_default_jvm_path()函式獲取預設路徑,或者寫jvm.dll的絕對路徑也可以
*args:為可選引數,只要是合法的jvm啟動引數都可以(大家可以百度一下jvm的啟動引數)
"-Djava.class.path=%s" % (jarpath) 此處是引用jar包,如果有多個jar包要引用的話可以這麼寫:
-Djava.class.path=%s,%s,%s " % (jarpath1,jarpath2,jarpath3)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69940641/viewspace-2912208/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python 指令碼中呼叫 Java 程式時 Classpath 錯誤Python指令碼Java
- JNI:Java程式碼呼叫原生程式碼Java
- 如何呼叫程式碼在python3中改變函式值?Python函式
- C# 呼叫Python程式碼C#Python
- elasticsearch之Java呼叫原生程式碼ElasticsearchJava
- 在CMakeLists.txt中設定版本號,並在程式碼中呼叫
- 在linux系統中,手動編寫java程式碼,將介面打成jar供其他程式呼叫,實現方式LinuxJavaJAR
- Java程式中除錯Python程式方法Java除錯Python
- python中怎麼呼叫另一個程式Python
- python呼叫matlab程式,MATLAB 指令碼打包為 exe可執行程式PythonMatlab指令碼行程
- Java和Python:程式碼作戰JavaPython
- 使用shell指令碼在Linux中管理Java應用程式指令碼LinuxJava
- C#呼叫IronPython動態執行Python程式碼C#Python
- Java 中的程式碼塊Java
- Java中的程式碼塊Java
- C#/.net程式呼叫pythonC#Python
- Java魔法堂:呼叫外部程式Java
- 在python程式碼 出力log日誌Python
- 在 .NET 平臺使用 ReflectionDynamicObject 優化反射呼叫程式碼Object優化反射
- 為什麼 Python 程式碼在函式中執行得更快?Python函式
- 在Python中呼叫Java擴充套件包HanLP測試記錄PythonJava套件HanLP
- 利用 Python 特性在 Jinja2 模板中執行任意程式碼Python
- extern "C"的用途—在C++程式碼中嵌入C程式碼C++C程式
- java高階用法之:在JNA中將本地方法對映到JAVA程式碼中Java
- 在Java程式中列印java執行時引數Java
- 在 markdown 中執行程式碼片段行程
- Java程式碼中字串拼接方式分析Java字串
- python程式碼打包exe程式Python
- 教你使用1行程式碼在Java中實現字串的逆序行程Java字串
- Java中靜態程式碼塊、構造程式碼塊、建構函式、普通程式碼塊Java函式
- jmeter學習指南之Beanshell 呼叫 java 程式碼的三種方式JMeterBeanJava
- C# 程式碼中呼叫 Javascript 程式碼段以提高應用程式的配置靈活性(使用 Javascript .NET 與 Jint)C#JavaScript
- 如何呼叫python中的shell指令碼?Python指令碼
- 在 Python 程式中啟動 mitmproxy 並控制 addonPythonMIT
- Python程式py程式碼加密方法Python加密
- 如何使用ABSL程式碼呼叫Web serviceWeb
- java 程式碼塊Java
- python呼叫程式路徑中包空格,及包含特殊字元問題Python字元