這篇文章給大家分享的是有關(guān)Python如何調(diào)用jar包的方法的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、海西網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為海西等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。需求
最近在后臺項目代碼中一段自定義的AES加解密的程序在平時的測試工作中應(yīng)用頻繁。因為寫腳本經(jīng)常會需要使用,而經(jīng)過各種嘗試,比如jpype等,都不盡如人意。最后轉(zhuǎn)換思路找到了一種好方法:
1. 將java項目打成jar包;
2. 設(shè)定jar包的Main-class屬性;
3. 在python中通過subprocess執(zhí)行jar包。
修改main函數(shù)打jar包
在intellij中打jar包:
1. File--> Project Structure... --> Artifacts --> + --> JAR --> From modules with dependencies --> OK --> 勾選Include in project build --> 記錄上方Output directory路徑 --> OK;
2. Build --> Build Project --> 之后就可以在Output directory路徑看到打的jar包了;
3. 用WinRAR打開jar包,修改其中META-INF文件夾下的MANIFEST.MF文件,增加一行Main-class入口,例如:"Main-class: com.package.name.Classname",注意冒號后面空一格,文件最后空一行。
注意:執(zhí)行jar包就是執(zhí)行jar包的Main-class中的main函數(shù)。所以如果要在python中調(diào)用java方法并傳參的話,要在打jar包前修改Main-class中的main方法,Main-class也就是目標(biāo)java類。
在Main-class的main函數(shù)中可以設(shè)置傳參:
String data= args[0];
String key = args[1];
// 調(diào)用解密程序并打印解密結(jié)果
這里data是密文,key是密鑰。
編寫python腳本
然后對應(yīng)寫python腳本,這里設(shè)定python文件名為aes.py,假定我們用來解密的jar包名為aes.jar:
import subprocess import chardet import sys class AES(object): def __init__(self, data, key): self.data = data self.key = key def decrypt(self): command = "java -jar aes.jar" arg0 = self.data arg1 = self.key cmd = [command,arg0,arg1] new_cmd = " ".join(cmd) stdout,stderr = subprocess.Popen(new_cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE).communicate() encoding = chardet.detect(stdout)["encoding"] result = stdout.decode(encoding) return result if __name__ == '__main__': data = sys.argv[1] key = sys.argv[2] AES = AES(data,key) print(AES.decrypt())