是否可以从Python调用java方法使用子进程

时间:2016-02-23 07:51:34

标签: java python ipc

我需要找到java和python程序之间的通信方式。我的应用程序是Java,另一个应用程序(python)将向我请求一些数据并在我的Java应用程序中触发一些进程。

已编辑:我的应用程序是使用Jboss Application服务器的Java桌面应用程序。

首次发布时,我没有足够的时间进行全面的沟通。所以我计划在第一个版本中使用 subprocess.Popen 。我会给他们一个罐子。然后他们可以从pyhton打电话给我。

实际上我计划制作一个单独的类,在main上有一些参数。然后根据参数,我的应用程序可以确定调用相关的函数。 但这里有一个问题。当他们想以下列方式调用我的函数时。在每次调用中,都会创建一个新的java进程,我无法从我的应用程序中保留一些静态变量。实际上我需要的是运行我的应用程序一次,然后从现有进程中访问一些函数。

#!/usr/bin/env python
from subprocess import Popen, PIPE

p = Popen(['java', '-jar', 'myjarfile.jar'], stdin=PIPE, stdout=PIPE)

您认为我可以使用 subprocess.Popen 实现此功能吗?如果没有,你能告诉我一个简单的方法吗?

1 个答案:

答案 0 :(得分:0)

我建议使用xmlrpc - 这非常简单:

import org.apache.xmlrpc.*;

public class JavaServer { 

  public Integer sum(int x, int y){
    return new Integer(x+y);
  }

  public static void main (String [] args){

    try {

      System.out.println("Attempting to start XML-RPC Server...");

      WebServer server = new WebServer(8080);
      server.addHandler("sample", new JavaServer());
      server.start();

      System.out.println("Started successfully.");
      System.out.println("Accepting requests. (Halt program to stop.)");

    } catch (Exception exception){
      System.err.println("JavaServer: " + exception);
    }
  }
}

(来源http://www.tutorialspoint.com/xml-rpc/xml_rpc_examples.htm

这是python客户端的一些代码:

import xmlrpc.client
proxy = xmlrpc.client.ServerProxy("http://localhost:8080/")
today = proxy.today()

(资料来源:https://docs.python.org/3/library/xmlrpc.client.html

你所要做的就是制作方法并将它们拼接在一起。