Python调用Jar包的两种方式小结
作者:Wintersee 发布时间:2023-07-26 06:29:12
概览
因工作场景,需要在python代码里调用Jar包来实现一些功能,调研下来主要有两种方式:
java -jar xx.jar
JPype
环境配置
因为要在公司内网操作,所以需要通过离线方式进行安装。环境用的是一个Centos7.7的docker镜像。
安装JDK
主要有三种方式:
1. 通过yum源安装
2. rpm安装
3. 解压JDK安装包手动安装
第一种方式需要联网或者配置内网的yum源
第三种方式比较繁琐且需要配置环境变量,相较而言第二种方式比较适合我这一次的场景
具体安装细节不再赘述,详情可参考这篇文章:CentOS安装jdk的几种方法及配置环境变量
安装JPype(如需要)
同样的,可以通过pip直接在线安装,也可以通过python setup.py install或者pip install xx.whl离线安装,可参考Python安装包的三种方式
JPype安装包和文档可以通过官方github 或者官方PyPi获取。
调用示例
java -jar
import os
import subprocess
import jpype
import time
def query_by_java_jar(jar_path, param):
execute = "java -jar {} '{}'".format(jar_path, param)
# print(execute)
output = subprocess.Popen(execute, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
res = output.stdout.readlines()
return res
JPype
import os
import subprocess
import jpype
import time
def query_by_jpype(jar_path, some_param):
if not jpype.isJVMStarted():
jpype.startJVM(classpath=[jar_path])
if not jpype.isThreadAttachedToJVM():
jpype.attachThreadToJVM()
try:
java_class = jpype.JClass('com.xxx.xxx')
result = java_class.someStaticFunction(some_param)
except Exception as e:
print(e)
result = None
finally:
#jpype.shutdownJVM()
return result
再多说一点
关于JPype
具体的使用场景和方法,可参考Github里的UserGuide
shutdown之后再start报错:OSError: JVM cannot be restarted
这是JPype的一个使用限制,为防止内存泄漏的,同一进程内关闭JVM后无法再次启动。
可考虑将调用方法写入到一个Python脚本,然后通过subprocess去调用。
官方解释此处也在贴一下:
JPype Known limitations
Restarting the JVM
JPype caches many resources to the JVM. Those resource are still allocated after the JVM is shutdown as there are still Python objects that point to those resources. If the JVM is restarted, those stale Python objects will be in a broken state and the new JVM instance will obtain the references to these resulting in a memory leak. Thus it is not possible to start the JVM after it has been shut down with the current implementation.
来源:https://blog.csdn.net/u012386109/article/details/120156736
猜你喜欢
- Python中实现socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务 端用有很多模块可以
- 1、两个函数介绍总得来说,connectedComponents()仅仅创建了一个标记图(图中不同连通域使用不同的标记,和原图宽高一致),c
- 官网: https://matplotlib.org一、版本# 01 matplotlib安装情况 import matplotlib ma
- 搭建环境:操作系统:Win10 64bitPython版本:3.7Pycharm:社区免费版一、Python3.7安装下载链接:官网http
- 1.什么是Javascript?Javascript是一种用于Web开发的编程语言。JavaScript在网络的客户端上运行。根据MDN,J
- 在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX,
- 以下效率,是奔腾 dual1.6G HZ,1G内存电脑,ie6.0下toggle()与slideToggle("fast"
- 1. AdaBoost 算法简介Boosting是机器学习的三大框架之一,其特点是,训练过程中的诸多弱模型,彼此之间有着强依赖关系。Boos
- 采用双重循环。把图片进行“.”分割后名字问前面部分,那其余数据库中的 图片路径记录进行对比 采用vb的InStr函数 如果存在的话返回值&g
- Java Java 是由 Sun 公司开发而成的一种编程语言,利用 Jave 写成的小程序叫做 Java
- 继续Mootools常用方法扩展,依然还是String类的扩展。方法:format说明:一个非常简单的format方法,和C#
- 今天在使用Pycharm的时候,由于文件过多,我对目录下的文件做了归类,改动了一些文件的路径,结果后来执行的时候,出现了路径找不到的错误.新
- 一、python pip的安装与使用1、pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。
- WebDriver简介selenium从2.0开始集成了webdriver的API,提供了更简单,更简洁的编程接口。selenium web
- 目录你有过摸鱼时间吗实现思路运行环境界面布局定时刷新剩余时间完整代码你有过摸鱼时间吗在互联网圈子里,常常说996上班制,但是也不乏965的,
- 前言:为了帮助广大考生和家长了解高考历年的录取情况,很多网站都汇总了各省市的录取控制分数线,为广大考生填报志愿提供参考。因受多种因素影响,每
- 前言在进行业务数据分析时,往往需要使用pandas计算环比、同比及增长率等指标,为了能够更加方便的进行的统计数据,整理方法如下。1.数据准备
- 在python-numpy使用中,可以用双层 for循环对数组元素进行访问,也可以切片成每一行后进行一维数组的遍历。代码如下:import
- 本文实例讲述了Python设计模式之命令模式原理与用法。分享给大家供大家参考,具体如下:命令模式(Command Pattern):将请求封
- 本文记录一下TensorFLow的几种图片读取方法,官方文档有较为全面的介绍。1.使用gfile读图片,decode输出是Tensor,ev