2010-11-01 135 views
5

道歉,如果我的问题是noob。我使用的是pgsql 8.4运行Django 1.2,我需要在从用户那里获得输入后运行Java程序,进行一些计算并将结果返回给用户。在java和python之间传递数据

我可以知道在Java和Python Django之间传递数据的最佳方式是什么,以便上述场景得到处理?我听说过Jython,但根据Django文档,它需要扩展jython-Django,但目前它不支持django 1.2.x.我应该使用stdout传递数据吗?

感谢人们听我说。

回答

3

使用subprocess并运行Java程序作为一个简单的子进程。它非常非常简单,速度也相当快。

如果您需要做更具扩展性的事情,您应该考虑用您的Java代码创建glassfish服务器,以便您的Python可以向Java发出Web服务请求。这是更具可扩展性,但也更多的工作。

+0

@洛特,谢谢你的建议。关于子进程,我如何将计算结果返回给Python? – goh 2010-11-01 10:34:03

+0

@goh:沟通渠道仅限于您的想象力。从文件开始。普通的旧文件。 Django写入文件,Java应用程序读取文件并写入新文件。你可以使用管道。您大概可以在谷歌搜索“进程间通信”并找到两个进程可以通信的其他六种方式。您的操作系统API包含文件和管道以外的多种机制。 – 2010-11-01 11:00:25

4

如果你所做的只是调用Java进行一些计算,那么子进程是最简单的方法,但我只是想抛出另一个选项。

JPype是一个软件包,可让您在Python程序中运行JVM,同时像Java代码一样调用Java代码(example)。

就是说,它就像Jython一样直接调用Java代码,并且像子进程一样调用CPython。考虑JPype,如果由于某种原因Java代码不容易从shell脚本(又名,子进程)中调用,或者需要进行大量的双向通信。

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进程。

0

这可能是你想要避免的。 但以最简单的方式,使用套接字/共享文件与Java将是最好的解决方案。 python套接字可以发送信息并从java中修改它。另一方面,如果那感觉像痛苦。如果您在同一台计算机上使用java和python,则可以使用共享文件,该java可以读取,而python可以读取。