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.
Python & Java (aber ohne Jython)
In dem Fall würde ich die Kommunikation zwischen Java und Python über XML-RPC abwickeln.
Um ein anderes Programm aufzurufen, gibt es in Java `Runtime#exec()`. In welcher Sprache das geschrieben ist, ist egal. Hier ist ein Beispiel:
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
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();
}
Stefan
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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 (former) Modvoice