Java和Python之间传递数据

5

如果我的问题很菜,请谅解。我正在使用Django 1.2和pgsql 8.4,并且需要在获取用户输入后运行Java程序,进行一些计算并将结果返回给用户。

请问有什么最好的方法可以在Java和Python Django之间传递数据,以便处理上述情况?我听说过Jython,但根据Django文档,它需要扩展jython-Django,但目前不支持django 1.2.x。我应该使用stdout传递数据吗?

感谢大家倾听我的问题。

4个回答

5
如果你只是调用Java进行一些计算,那么子进程是最简单的方法,但我想提供另一种选择。JPype是一个包,它允许你在Python程序中运行JVM,并调用Java代码,就像它是Python代码一样(example)。也就是说,它像Jython一样直接调用Java代码,又像子进程一样实际上运行的是CPython。如果由于某些原因从shell脚本(即子进程)不容易调用Java代码,或者需要大量的双向通信,请考虑使用JPype。

4
使用 subprocess 作为简单子进程运行Java程序。这非常简单且速度合理。
如果您需要进行更可扩展的操作,应该考虑使用glassfish服务器与Java代码一起创建,以便您的Python可以向Java发出Web服务请求。 这样做更具可扩展性,但也需要更多的工作。

@Lott,感谢你的建议。关于子进程,我如何将计算结果返回给Python? - goh
@goh:通信渠道只受你的想象力限制。从文件开始。普通的文件。Django写入一个文件,你的Java应用程序读取该文件并写入一个新文件。你可以使用管道。你可能可以在谷歌上搜索“进程间通信”,找到其他半打进程之间通信的方法。你的操作系统API包括除文件和管道之外的几种机制。 - S.Lott

0

这可能是你想要避免的。 但在最简单的事情上,使用Java的套接字/共享文件将是最好的解决方案。 Python套接字可以从Java发送信息并进行修改。 另一方面,如果感觉很麻烦。如果您在同一台计算机上同时使用Java和Python,则可以使用共享文件,Java可以从中读取,而Python可以写入。


0

你也可以使用Py4J来完成这个任务:

from py4j.java_gateway import JavaGateway
gateway = JavaGateway()                        # connect to the JVM
gateway.jvm.java.lang.System.out.println('Hello World!')

您应首先启动Java程序,然后从Python中调用Java方法。

py4j不会启动JVM,它只是连接到已经启动的Java进程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接