2010-11-01 2 views
5

Scusa se la mia domanda è noob. Sto eseguendo Django 1.2 con pgsql 8.4 e ho bisogno di eseguire un programma Java dopo aver ricevuto gli input dall'utente, fare alcuni calcoli e restituire i risultati all'utente.passaggio di dati tra java e python

Posso sapere qual è il modo migliore per passare i dati tra Java e Python Django, in modo tale che lo scenario di cui sopra sia curato? Ho sentito parlare di Jython, ma secondo i documenti di Django, richiede l'estensione jython-Django, ma attualmente non supporta django 1.2.x. Devo passare i dati usando stdout?

grazie persone per avermi ascoltato.

risposta

3

Utilizzare subprocess ed eseguire il programma Java come sottoprocesso semplice. È molto, molto semplice e abbastanza veloce.

Se hai bisogno di fare qualcosa di più scalabile, dovresti cercare di creare un server glassfish con il tuo codice Java in modo che Python possa fare richieste di servizi Web a Java. Questo è più scalabile, ma anche più lavoro.

+0

@Lott, grazie per i vostri suggerimenti. Riguardo al sottoprocesso, come posso restituire i risultati calcolati a Python? – goh

+0

@goh: i canali di comunicazione sono limitati solo dalla tua immaginazione. Inizia con i file. Semplici vecchi file Django scrive un file, la tua app Java legge il file e scrive un nuovo file. Puoi usare le pipe. Probabilmente puoi cercare su Google "Interprocess Communication" e trovare una mezza dozzina di altri modi in cui due processi possono comunicare. Le API del sistema operativo includono diversi meccanismi diversi da file e pipe. –

4

Se tutto ciò che si sta facendo è chiamare Java per alcuni calcoli, quindi il sottoprocesso è il modo più semplice, ma volevo solo lanciare un'altra opzione là fuori.

JPype è un pacchetto che consente di eseguire una JVM all'interno del programma Python mentre chiama il codice Java come se fosse Python (example).

Cioè, è come Jython in quanto si chiama codice Java direttamente e come sottoprocesso in quanto in realtà stai eseguendo CPython. Considerare JPype se per qualche ragione il codice Java non è facile da chiamare da uno script di shell (alias, sottoprocesso) o se è necessaria molta comunicazione bidirezionale.

0

È inoltre possibile utilizzare Py4J per questo compito:

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

Si dovrebbe prima iniziare il programma Java, e quindi richiamare il metodo Java da Python.

py4j non avvia jvm, si collega solo al processo Java già avviato.

0

Potrebbe essere quello che volevi evitare. ma, nel modo più semplice, l'utilizzo di socket/file condiviso con java sarà la soluzione migliore. Il socket python di può inviare informazioni e modificarlo da java. D'altra parte se sembra una sofferenza. se usi java e python sullo stesso computer puoi usare un file condiviso, che java può leggere e python può wright.