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


Posted in Python onAugust 11, 2020

需求

最近在后台项目代码中一段自定义的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的解密程序,从而打印出解密后的字符串了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现两款计算器功能示例
Dec 19 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 Python
python对验证码降噪的实现示例代码
Nov 12 Python
python读取Kafka实例
Dec 23 Python
python读取图片的几种方式及图像宽和高的存储顺序
Feb 11 Python
给ubuntu18安装python3.7的详细教程
Jun 08 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
Jun 09 Python
Python实现Keras搭建神经网络训练分类模型教程
Jun 12 Python
python怎么调用自己的函数
Jul 01 Python
python集合能干吗
Jul 19 Python
pytorch Dropout过拟合的操作
May 27 Python
总结Python连接CS2000的详细步骤
Jun 23 Python
如何用python免费看美剧
Aug 11 #Python
Pythonic版二分查找实现过程原理解析
Aug 11 #Python
Python3合并两个有序数组代码实例
Aug 11 #Python
Python基于gevent实现文件字符串查找器
Aug 11 #Python
Python3如何实现Win10桌面自动切换
Aug 11 #Python
Python3如何使用多线程升程序运行速度
Aug 11 #Python
使用Python pip怎么升级pip
Aug 11 #Python
You might like
PHP实用函数分享之去除多余的0
2015/02/06 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
精解window.setTimeout()&window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
Node.js 制作实时多人游戏框架
2015/01/08 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
JavaScript事件详细讲解
2016/06/27 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python 命令行非阻塞输入的小例子
2013/09/27 Python
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
Python程序中设置HTTP代理
2016/11/06 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
python3.4中清屏的处理方法
2020/07/06 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
2014自荐信的写作技巧
2014/01/28 职场文书
《落花生》教学反思
2014/02/25 职场文书
开会通知
2015/04/20 职场文书
送达通知书
2015/04/25 职场文书
信息简报范文
2015/07/21 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书