2016-02-23 1 views
0

Мне нужно найти способ связи между java и программой python. Моим приложением является Java, а другое приложение (python) запрашивает у меня некоторые данные и запускает некоторый процесс в моем приложении Java.Можно ли вызвать java-методы из Python С подпроцессом

EDITED: Мое приложение - настольное приложение Java, использующее сервер приложений Jboss.

Для первого выпуска у меня недостаточно времени, чтобы создать исчерпывающий способ общения. Поэтому я планирую использовать подпроцесс .Popen для первого выпуска. Я дам им банку. Тогда они могут позвонить мне из Питона.

На самом деле я планировал сделать один класс, который принимает некоторые аргументы по основному. Затем, согласно параметрам, мое приложение может определить вызов соответствующей функции. Но проблема здесь. Когда они хотят вызвать мои функции следующим образом. в каждом вызове будет создан новый java-процесс, и я не могу сохранить некоторые статические переменные из своего приложения. На самом деле мне нужно запустить приложение сразу, а затем получить доступ к некоторым функциям из существующего процесса.

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

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

Как вы думаете, Могу ли я осуществить это с помощью subprocess.Popen. Если нет, вы можете показать мне простой способ?

+0

Popen на самом деле не вызывает ничего из python. Вы также можете сделать сценарий оболочки –

ответ

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)

Вот код для питона клиента:

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

(Источник: https://docs.python.org/3/library/xmlrpc.client.html)

Все, что вам нужно сделать, это сделать так, чтобы вы меня тоды и сшить их вместе.

+0

Спасибо. Но мое приложение - настольное приложение. Я редактировал вопрос – user725455