成都网站建设设计

将想法与焦点和您一起共享

Python如何调用jar包的方法-创新互联

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

创新互联专注于企业营销型网站、网站重做改版、海西网站定制设计、自适应品牌网站建设、成都h5网站建设商城网站开发、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为海西等各大城市提供网站开发制作服务。

需求

最近在后台项目代码中一段自定义的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://chengdu.cdxwcx.cn/article/ccsjps.html