从Python调用非本机Java代码

Gre*_*reg 6 python java cgi

我希望能够调用已经运行的Java jar中包含的某些方法(确保它将运行).我找到了像Jython这样的东西,但那些似乎只能访问Java的本机类等.

tab*_*has 3

看看这个:从 Python 调用 Java

您还可以使用 Py4J。首页上有一个示例和大量文档,但本质上,您只需从 Python 代码中调用 Java 方法,就像它们是 Python 方法一样:

from py4j.java_gateway import JavaGateway
Run Code Online (Sandbox Code Playgroud)

gateway = JavaGateway() # 连接到 JVM

java_object = gateway.jvm.mypackage.MyClass() # 调用构造函数

other_object = java_object.doThat()

other_object.doThis(1,'abc')

gateway.jvm.java.lang.System.out.println('Hello World!') # 调用静态方法

与 Jython 不同,Py4J 的一部分在 Python VM 中运行,因此它始终与最新版本的 Python 保持“最新”,并且您可以使用在 Jython 上运行不佳的库(例如 lxml)。另一部分在您要调用的 Java VM 中运行。

通信是通过套接字而不是 JNI 完成的,Py4J 有自己的协议(用于优化某些情况、管理内存等)

  • 来自 Py4J 网站:“请注意,必须在执行上面的 Python 代码之前启动 Java 程序。换句话说,Py4J 不会启动 JVM。” ---- 访问他们的网站:http://py4j.sourceforge.net/index.html (2认同)