Python調用java方法

來源:互聯網
上載者:User

標籤:匯入jar包   span   目錄   應用   pop   java方法   需要   self   col   

[本文出自天外歸雲的部落格園]

需求

最近在後台項目代碼中一段自訂的AES加解密的程式在平時的測試工作中應用頻繁。因為寫指令碼經常會需要使用,而經過各種嘗試,比如jpype等,都不盡如人意。最後轉換思路找到了一種好方法:

1. 將java項目打成jar包;

2. 設定jar包的Main-class屬性;

3. 在python中通過subprocess執行jar包。

修改main函數打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",注意冒號後面空一格,檔案最後空一行。

注意:執行jar包就是執行jar包的Main-class中的main函數。所以如果要在python中調用java方法並傳參的話,要在打jar包前修改Main-class中的main方法,Main-class也就是目標java類。

在Main-class的main函數中可以設定傳參:

String data= args[0];String key = args[1];// 調用解密程式並列印解密結果

這裡data是密文,key是密鑰。

編寫python指令碼

然後對應寫python指令碼,這裡設定python檔案名稱為aes.py,假定我們用來解密的jar包名為aes.jar:

import subprocessimport chardetimport sysclass 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 resultif __name__ == ‘__main__‘:    data = sys.argv[1]    key = sys.argv[2]    AES = AES(data,key)    print(AES.decrypt())

這裡為了與jar包的兩個傳參相對應也設定python指令碼需要傳入兩個參數,第一個是待解密的資料data,第二個是解密鑰匙key。

這裡我們建立一個檔案夾aes,將aes.py和aes.jar放到該檔案夾下,二者同處於aes根目錄下。

然後在目前的目錄下啟動cmd,執行python指令碼,傳入data和key兩個參數給python指令碼:

python aes.py "待解密的字串" "密鑰"

在python指令碼會將這兩個參數再傳遞給jar包並調用jar包Main-class的main函數中調用解密過程並列印解密結果。

這樣就可以在python中調用java的解密程式,從而列印出解密後的字串了。

 

參考資料

1. IntelliJ IDEA java項目匯入jar包,打jar包

2. Java運行jar命令提示沒有主清單屬性

3. 在cmd中使用指令來執行jar包

Python調用java方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.