美文网首页
python如何调用java方法

python如何调用java方法

作者: 逝水如歌 | 来源:发表于2019-11-05 00:12 被阅读0次

    话说, python真的是无所不能。
    我们在抓app数据的时候,有很大概率会遇见参数加密的情况。我们费了很大力气,找到了加密的位置,扣出了加密的函数,但是由于是反编译后的java代码,对于用python写爬虫的程序员来说,如果再把java翻译成python,有时候就很困难了,特别是遇到了一些移位操作时候,由于python默认会把int转成long,java则是溢出,python和java相同逻辑,得到的结果却是不一样。那就更困难了。
    好消息是,python可以直接调用jar包。我们可以直接把加密代码直接打成jar包,供python爬虫来调用,这样一来,省去了很多的麻烦事。
    python 调用jar包可以使用jpype模块来实现

    安装jpype

    需要先安装好python3.7、java8、visual C++编译器,
    pip install jpype1
    安装出现错误信息请自行百度查找解决方法。

    简单使用

    启动 jvm 和关闭 jvm

    JPype 提供的 startJVM(jvm, *args) 函数的作用是启动java虚拟机,在代码中调用java代码之前,首先要使用此方法来启动java虚拟机。
    jvm, 描述你系统中 jvm.dll 文件所在的路径,如“ C:\Program Files\IBM\Java50\jre\bin\j9vm\jvm.dll ”。可以通过调用 jpype.getDefaultJVMPath() 得到默认的 JVM 路径。
    args, 为可选参数,会被 JPype 直接传递给 JVM 作为 Java 虚拟机的启动参数。此处适合所有合法的 JVM 启动参数,例如:
    -agentlib:libname[=options] -classpath classpath -verbose -Xint

    shutdownJVM() 函数的作用是关闭java虚拟机,在结束调用java代码时候,使用此方法可以关闭java虚拟机。

    判断java虚拟机是否启动

    JPype 提供的 jpype.isJVMStarted() 函数可以判断 JVM 是否已启动。
    返回值为 True 表示 JVM 已经启动,返回值为 False 表示 JVM 还未启动

    hello world 程序

    import jpype 
    jvmPath = jpype.getDefaultJVMPath() 
    jpype.startJVM(jvmPath) 
    jpype.java.lang.System.out.println( “ hello world! ” ) 
    jpype.shutdownJVM()
    

    使用jpype调用jar包

    jar包源代码

    package wwz.bigeye;
    
    public class JpypeDemo {
        public String sayHello(String user){
            return "hello" + user;
        }
        public int calc(int a, int b){
            return a + b;
        }
    }
    

    将此源码打包编译为:JpypeDemo.jar。

    python调用代码

    # Djava.class.path指定jar包的路径
    startJVM(getDefaultJVMPath(), "-ea", "-Djava.class.path=%s" % (os.getcwd() + '\JpypeDemo.jar'))
    
    # 找到class
    JYDClass = JClass("wwz.bigeye.JpypeDemo")
    # 执行类中的函数
    result = (JYDClass.calc(1, 2))
    print(result)
    shutdownJVM()
    

    执行以上代码,就可以看到执行的结果啦。是不是很简单!

    大家可关注一下我的个人公众号,不定时分享一些爬虫案例和技巧


    qrcode_for_gh_7dbef0ec6098_258.jpg

    相关文章

      网友评论

          本文标题:python如何调用java方法

          本文链接:https://www.haomeiwen.com/subject/sbijbctx.html