在python程序中调用java代码

Posted Solarium

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python程序中调用java代码相关的知识,希望对你有一定的参考价值。

   python是一门“胶水”语言,非常灵活多变,但是在一些特殊的时候,也需要调用其它语言来协助实现更多的功能;在公司使用python进行接口测试的时候,会遇到有些接口数据是由公司的开发人员进行自定义的加密算法进行加密的,此时,要开发告诉加密代码是不太可能的。跟开发小哥沟通时,很多时候都是由他给一个jar包,然后剩下的就由测试人员来发挥了。
那python 该如何使用这个jar包呢?
这里给大家介绍的是jpype;
一、什么是Jpype
    JPype是一个能够让 python 代码方便地调用 Java 代码的工具;
二、安装Jpype
    pip install jpype1  (注意:是jpype1哦,这个1请一定不要忘记)
三、Jpype的使用流程
    Jpype是给python程序员来使用的。他能调用启jar包,其实还是要去启用jvm来对java代码进行运行;所以请确保你的jdk正确安装并配置好环境变量。
    基本流程:
    ①、使用jpype开启jvm
    ②、加载java类
    ③、调用java方法
    ④、关闭jvm(不是真正意义上的关闭,卸载之前加载的类)
    举例说明:
    1、先写好java代码,并生成jar包;
    package com.pyjava.demo;

    public class Demo1 {

     public int add(int a ,int b) {
        return a+b;
       }
    }
    导出成jar包:pyjava.jar
    2、使用Jpype代码:
    import jpype
    import os
    jarpath = os.path.join(os.path.abspath('.'), '//Users//luoman//file//pyjava.jar')  #定义变量引用jar包的路径
    # 1、开启jvm
    jvmpath = jpype.get_default_jvm_path() #获取jvm的路径,一般情况下由此函数获取就可以
    jpype.startJVM(jvmpath, "-ea", "-Djava.class.path=%s" % (jarpath))  # 使用startJvm()函数 启动jvm  
    # 2、加载java类
    javaclass = jpype.JClass("com.pyjava.demo.Demo1") # 此处要写长类名(包名.类名)
    # 3、调用java方法
    jc = javaclass()   #定义java对象
    sum = jc.add(3,4)  #调用jar包中的函数
    print('两数之和为:',sum)
    # 4、关闭jvm
    jpype.shutdownJVM()
    运行结果:两数之和为:7

    也可以直接调用java的api,比如调用java的标准输出语句:
    java.lang.System.out.println("helloworld")

 四、startJVM() 函数详细说明
        startJVM() 函数的作用是启动 JAVA 虚拟机
        jpype.startJVM() 的定义
           startJVM(jvm, *args)
        参数说明:
        jvm:描述你系统中 jvm.dll 文件所在的路径,可以直接使用get_default_jvm_path()函数获取默认路径,或者写jvm.dll的绝对路径也可以
        *args:为可选参数,只要是合法的jvm启动参数都可以(大家可以百度一下jvm的启动参数)
        "-Djava.class.path=%s"?%?(jarpath) 此处是引用jar包,如果有多个jar包要引用的话可以这么写:
        -Djava.class.path=%s,%s,%s" % (jarpath1,jarpath2,jarpath3)

     2020年 第二期《python全栈测试开发》网络课程于3月29日开班,欢迎加群:1085210541

以上是关于在python程序中调用java代码的主要内容,如果未能解决你的问题,请参考以下文章

ASP.net MVC 代码片段问题中的 Jqgrid 实现

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

java代码在片段活动中不起作用

如何在片段中使用 GetJsonFromUrlTask​​.java

我在哪里更改此 Python 代码片段以将临时文件保存在 tmp 文件夹中?

Java调用Python程序