当前位置:  开发笔记 > 编程语言 > 正文

如何从CPython调用java对象和函数?

如何解决《如何从CPython调用java对象和函数?》经验,为你挑选了3个好方法。

我有一个python程序,它运行在CPython实现上,在其中我必须调用java程序中定义的函数.我怎样才能做到这一点?

能够使用一些java对象会很高兴.

Jython不是一个选择.我必须在CPython中运行python部分.



1> Barthelemy..:

为复活线程道歉,但我想我有更好的答案:-)

你也可以使用Py4J,它有两个部分:一个在CPython(或任何Python解释器)中运行的库和一个在你想要调用的Java VM上运行的库.

首页上有一个例子和很多文档,但实际上,你只需要从你的python代码中调用Java方法,就像它们是python方法一样:

>>> from py4j.java_gateway import JavaGateway
>>> gateway = JavaGateway()                        # connect to the JVM
>>> java_object = gateway.jvm.mypackage.MyClass()  # invoke constructor
>>> other_object = java_object.doThat()
>>> other_object.doThis(1,'abc')
>>> gateway.jvm.java.lang.System.out.println('Hello World!') # call a static method

通过套接字而不是JNI完成通信.

免责声明:我是Py4J的作者



2> S.Lott..:

最简单的事情是

    为您的java"函数"编写一个简单的CLI.(没有这样的东西,所以我假设你实际上是指Java类的方法函数.)

    public class ExposeAMethod {
        public static void main( String args[] ) {
             TheClassToExpose  x = new TheClassToExpose();
            x.theFunction();
        }
    }
    

    编译并构建一个可执行的JAR文件,并将其作为入口点.叫它 ExposeAMethod.jar

    从子进程创建的命令中调用它.

    import subprocess
    p = subprocess.Popen("java -jar ExposeAMethod.jar", shell=True)
    sts = os.waitpid(p.pid, 0)
    

这是最低限度.它真的不多.我算了6行java,3行Python,你就开始运行了.

如果要将参数传递给此Java类构造函数或方法函数,则必须编写更多代码行.你有两个选择.

从stdin读取参数,在stdout上写入结果.这相对简单,表现非常好.

将参数解析为Java的命令行选项,在stdout上写入结果.这稍微难一些,但很好地概括.奖励是您现在拥有一个可以重用的有用的命令行Java程序.



3> Ravi..:

如果你不想写自己的JNI/C路线.

另一个选择是使用jpype,对我来说总是我用来访问Oracle数据库,因为在PC上安装oracle c驱动程序是一个皮塔饼.你可以做(​​从文档):

 from jpype import * 
 startJVM("d:/tools/j2sdk/jre/bin/client/jvm.dll", "-ea") # or path to your jvm
 java.lang.System.out.println("hello world") 
 shutdownJVM()

它暂时没有更新,文档的方式也不多,但它确实运行得相当好.

主页

文档

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有