这篇文章给大家分享的是有关Python如何调用jar包的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

需求
最近在后台项目代码中一段自定义的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 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()) 网页题目:Python如何调用jar包的方法-创新互联
文章起源:http://www.jxjierui.cn/article/ccsjps.html


咨询
建站咨询
