当前位置: 移动技术网 > IT编程>脚本编程>Python > Python调用jar包方法实现过程解析

Python调用jar包方法实现过程解析

2020年08月12日  | 移动技术网IT编程  | 我要评论
需求最近在后台项目代码中一段自定义的aes加解密的程序在平时的测试工作中应用频繁。因为写脚本经常会需要使用,而经过各种尝试,比如jpype等,都不尽如人意。最后转换思路找到了一种好方法:1. 将jav

需求

最近在后台项目代码中一段自定义的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())

这里为了与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的解密程序,从而打印出解密后的字符串了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网