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抓taobao图片爬虫
Oct 26 Python
Python类方法__init__和__del__构造、析构过程分析
Mar 06 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
python引入导入自定义模块和外部文件的实例
Jul 24 Python
关于Python数据结构中字典的心得
Dec 04 Python
Python+树莓派+YOLO打造一款人工智能照相机
Jan 02 Python
python实战串口助手_解决8串口多个发送的问题
Jun 12 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
Oct 18 Python
python os.path.isfile 的使用误区详解
Nov 29 Python
python3让print输出不换行的方法
Aug 24 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 15 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Jun 03 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
2006/12/13 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
PHP中is_dir()函数使用指南
2015/05/08 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
对pandas中apply函数的用法详解
2018/04/10 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
Python类装饰器实现方法详解
2018/12/21 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
pygame实现俄罗斯方块游戏(基础篇1)
2019/10/29 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
北美领先的牛仔品牌:Buffalo David Bitton
2017/05/22 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
卫校中专生个人自我评价
2013/09/19 职场文书
幼儿园中秋节活动方案2013
2014/01/29 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
教师党员自我评议不足范文
2014/10/19 职场文书