Python调用Jar包的两种方式小结

 更新时间:2022年12月08日 10:19:26   作者:Wintersee  
这篇文章主要介绍了Python调用Jar包的两种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

概览

因工作场景,需要在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.

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解在Python中创建条形图追赶动画

    详解在Python中创建条形图追赶动画

    动画是使可视化更具吸引力和用户吸引力的好方法。它帮助我们以有意义的方式展示数据可视化。Matplotlib是一个非常流行的数据可视化库,通常用于数据的图形表示以及使用内置函数的动画。本文将用Matplotlib绘制条形图追赶动画,需要的可以参考一下
    2022-03-03
  • pandas预处理部分地区数据案例

    pandas预处理部分地区数据案例

    本文主要介绍了pandas预处理部分地区数据案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Python处理电子表格的Pandas、OpenPyXL、xlrd和xlwt库

    Python处理电子表格的Pandas、OpenPyXL、xlrd和xlwt库

    在Python中处理表格数据,有几个非常流行且功能强大的库,Pandas在数据分析方面提供了广泛的功能,而OpenPyXL、xlrd和xlwt则在处理Excel文件方面各有所长,以下是一些最常用的库及其示例代码
    2024-01-01
  • 10分钟学会使用python实现人脸识别(附源码)

    10分钟学会使用python实现人脸识别(附源码)

    这篇文章主要介绍了10分钟学会使用python实现人脸识别(附源码),帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • python函数形参用法实例分析

    python函数形参用法实例分析

    这篇文章主要介绍了python函数形参用法,较为详细的讲述了Python函数形参的功能、定义及使用技巧,需要的朋友可以参考下
    2015-08-08
  • 使用PyTorch实现随机搜索策略

    使用PyTorch实现随机搜索策略

    这篇文章主要介绍了使用PyTorch实现随机搜索策略,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • python调用stitcher类自动实现多个图像拼接融合功能

    python调用stitcher类自动实现多个图像拼接融合功能

    这篇文章主要介绍了python调用stitcher类自动实现多个图像拼接融合功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Linux下使用python脚本执行BCP导入导出方式

    Linux下使用python脚本执行BCP导入导出方式

    这篇文章主要介绍了Linux下使用python脚本执行BCP导入导出方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 创建Python Docker镜像的详细步骤

    创建Python Docker镜像的详细步骤

    Python和Docker是两个极其流行的技术,结合它们可以创建强大的应用程序,Docker允许将应用程序及其依赖项打包到一个独立的容器中,而Python则提供了丰富的库和工具来开发应用程序,本文将提供如何创建Python Docker镜像的全面指南,,需要的朋友可以参考下
    2023-12-12
  • 手把手教你pip配置国内镜像源(最新详尽版)

    手把手教你pip配置国内镜像源(最新详尽版)

    pip是一个现代的,通用的Python包管理工具,提供了对Python包的查找、下载、安装、卸载的功能,下面这篇文章主要给大家介绍了关于pip配置国内镜像源的相关资料,需要的朋友可以参考下
    2023-02-02

最新评论