从 python 使用 Java 库

2022-09-01 02:21:45

我有一个python应用程序和java应用程序。python 应用为 java 应用生成输入,并在命令行上调用它。

我相信一定有一个更优雅的解决方案;就像使用JNI从Java调用C代码一样。

任何指针?(仅供参考,我是Python的新手)

澄清(以一个长问题为代价:道歉)py应用程序(我不拥有)以许多配置文件的形式接受用户输入。然后,它插入这些,并且服务器场通过插件机制将工作到许多(隐藏的)工具中。我希望添加对旧版Java应用程序提供的功能的支持。

因此,从java应用程序调用python应用程序是没有意义的,我无法在jython环境(在JVM上)运行py应用程序。

由于没有明显的机制,我认为简单的CL调用是最好的解决方案。


答案 1

很抱歉重新恢复线程,但没有接受的答案...

你也可以使用Py4J。首页上有一个示例和大量文档,但从本质上讲,您只需从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

与Jython相反,Py4J在Python VM中运行,因此它始终与最新版本的Python“保持同步”,并且您可以使用在Jython上运行不佳的库(例如,lxml)。通信是通过套接字而不是 JNI 完成的。

免责声明:我是Py4J的作者


答案 2

看看Jython。它有点像JNI,但用Python替换C,即你可以从Java调用Python,反之亦然。目前还不完全清楚你想做什么,或者为什么你目前的方法不是你想要的。