【问题标题】:passing data between java and python在java和python之间传递数据
【发布时间】:2011-05-03 08:31:13
【问题描述】:

抱歉,如果我的问题是菜鸟。我正在运行带有 pgsql 8.4 的 Django 1.2,我需要在从用户那里获取输入后运行 Java 程序,进行一些计算并将结果返回给用户。

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

感谢人们倾听我的声音。

【问题讨论】:

    标签: java python django jython


    【解决方案1】:

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

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

    也就是说,它与 Jython 类似,您可以直接调用 Java 代码,而与子进程类似,您实际上正在运行 CPython。如果由于某种原因 Java 代码不容易从 shell 脚本(也称为子进程)调用,或者需要大量双向通信,请考虑使用 JPype。

    【讨论】:

      【解决方案2】:

      使用subprocess 并将Java 程序作为一个简单的子进程运行。它非常、非常简单且相当快。

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

      【讨论】:

      • @Lott,感谢您的建议。关于子进程,如何将计算结果返回给 Python?
      • @goh:沟通渠道仅限于您的想象力。从文件开始。普通的旧文件。 Django 写入一个文件,您的 Java 应用程序读取该文件并写入一个新文件。您可以使用管道。您可能可以在 Google 上搜索“进程间通信”并找到六种其他两个进程可以通信的方式。您的操作系统 API 包括文件和管道以外的多种机制。
      【解决方案3】:

      你也可以使用 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 进程。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-01
          • 2017-06-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多