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利用matplotlib库绘制饼图的方法示例
Dec 18 Python
Python实现视频下载功能
Mar 14 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
May 24 Python
python操作excel的方法(xlsxwriter包的使用)
Jun 11 Python
Python提取支付宝和微信支付二维码的示例代码
Feb 15 Python
学习python的前途 python挣钱
Feb 27 Python
简单了解django缓存方式及配置
Jul 19 Python
python中的global关键字的使用方法
Aug 20 Python
基于python3 的百度图片下载器的实现代码
Nov 05 Python
python实现密码验证合格程序的思路详解
Jun 01 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
python如何利用cv2模块读取显示保存图片
Jun 04 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面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
PHP附件下载中文名称乱码的解决方法
2015/12/17 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
javascript中的继承实例代码
2011/04/27 Javascript
关于IE BUG与字符串截取substr的解决办法
2013/04/10 Javascript
学习Bootstrap组件之下拉菜单
2015/07/28 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
浏览器JavaScript调试功能无法使用解决方案
2020/09/18 Javascript
用python写的一个wordpress的采集程序
2016/02/27 Python
python实现图像识别功能
2018/01/29 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
简单谈谈python基本数据类型
2018/09/26 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
2020/06/14 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
你所在的项目是如何确定版本号的
2015/12/28 面试题
软件工程师岗位职责
2013/11/16 职场文书
致百米运动员广播稿
2014/01/29 职场文书
2015年资料员工作总结
2015/04/25 职场文书
2015年行政部工作总结
2015/04/28 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
浅谈Python响应式类库RxPy
2021/06/14 Python