Python & Java (aber ohne Jython)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
fuppes
User
Beiträge: 28
Registriert: Dienstag 15. April 2008, 22:33

Python & Java (aber ohne Jython)

Beitragvon fuppes » Mittwoch 30. April 2008, 23:24

Hi,

ich wollte mal fragen wie das mit Java und Python nun so richtig funktioniert. Wenn ich das richtig verstanden habe gibts Jython welches mir erlaubt auf fast alle klassen von java zuzugreifen und vererbung zwischen Python und Java zu ermöglichen. Das ist bestimmt auch ne feine sache, aber was ist wenn man "nur" python aus Java ausrufen möchte und dabei ein paar parameter übergeben möchte und dann vielleicht noch ne Rückmeldung von python (Fehlermeldung / Status/...) erhalten will. Also alles mit Vererbung / zugriff aus klassen von Java und so weglassen möchte. Muss man dann trotzdem auf Jython zurückgreifen? Ihc meine das könnte man bestimmt auch mit Web Services lösen, is nur die frage ob das nun viel besser ist.
BlackJack

Beitragvon BlackJack » Donnerstag 1. Mai 2008, 07:38

In dem Fall würde ich die Kommunikation zwischen Java und Python über XML-RPC abwickeln.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Donnerstag 1. Mai 2008, 08:44

Um ein anderes Programm aufzurufen, gibt es in Java `Runtime#exec()`. In welcher Sprache das geschrieben ist, ist egal. Hier ist ein Beispiel:

Code: Alles auswählen

public static void main(String[] args) throws IOException, InterruptedException {
  Process p = Runtime.getRuntime().exec("/usr/bin/python /tmp/a.py arg");
  PrintWriter w = new PrintWriter(p.getOutputStream());
  try {
    w.println("input");
  } finally {
    w.close();
  }
  Reader r = new InputStreamReader(p.getInputStream());
  String result;
  try {
    result = readAll(r);
  } finally {
    r.close();
  }
  int status = p.waitFor();
       
  System.out.println("Status = " + status);
  System.out.println("Result = " + result);
}
   
private static String readAll(Reader r) throws IOException {
  StringBuilder sb = new StringBuilder(4096);
  char[] buf = new char[1024];
  int len = r.read(buf);
  while (len != -1) {
    sb.append(buf, 0, len);
    len = r.read(buf);
  }
  r.close();
  return sb.toString();
}

Das Python-Programm `/tmp/a.py` kann das Argument "arg" über `sys.argv` einlesen, kann die Eingabe `input` aus "stdin" lesen und über "stdout" (etwa per print) etwas an das Java-Programm zurückgeben. Es kann außerdem `sys.exit()` benutzen, um den Status zu setzen.

Stefan
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 1. Mai 2008, 09:27

Außerdem könnte man sich auch JPype ansehen. Das scheint konzeptuell so etwas zu sein was du suchst, allerdings bin ich nicht sicher, ob das nicht schon tot ist.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
fuppes
User
Beiträge: 28
Registriert: Dienstag 15. April 2008, 22:33

Beitragvon fuppes » Donnerstag 1. Mai 2008, 19:09

super, danke für die antworten, dann mach ich mal an die arbeit.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]