Ich frage mich, ob es möglich ist, Python-Funktionen von Java-Code aus mit Jython aufzurufen, oder ob es nur dafür gedacht ist, Java-Code von Python aus aufzurufen?
Antworten
Zu viele Anzeigen?Hier ist eine Bibliothek, die es Ihnen ermöglicht, Ihre Python-Skripte einmal zu schreiben und zur Laufzeit zu entscheiden, welche Integrationsmethode (Jython, CPython/PyPy über Jep und Py4j) verwendet werden soll:
https://github.com/subes/invesdwin-context-python
Da jede Methode ihre eigenen Vor- und Nachteile hat, wie im Link erklärt.
(3 Module: jep, Py4J, jython)
Es hängt davon ab, was du mit Python-Funktionen meinst. Wenn sie in cpython geschrieben wurden, kannst du sie nicht direkt aufrufen. Du musst JNI verwenden. Wenn sie jedoch in Jython geschrieben wurden, kannst du sie einfach von Java aus aufrufen, da Jython letztendlich Java-Bytecode generiert.
Wenn ich jetzt sage, dass sie in cpython oder jython geschrieben sind, macht das nicht viel Sinn, denn Python ist Python und der meiste Code läuft auf beiden Implementierungen, es sei denn, du verwendest spezifische Bibliotheken, die auf cpython oder Java basieren.
Sieh hier, wie du den Python-Interpreter in Java verwenden kannst.
Jython hat einige Einschränkungen:
Es gibt eine Reihe von Unterschieden. Erstens können Jython-Programme keine in C geschriebenen CPython-Erweiterungsmodule verwenden. Diese Module haben normalerweise Dateien mit den Erweiterungen .so, .pyd oder .dll. Wenn Sie ein solches Modul verwenden möchten, sollten Sie nach einem gleichwertigen Modul in reinem Python oder Java suchen. Obwohl es technisch machbar ist, solche Erweiterungen zu unterstützen - IronPython macht dies -, gibt es keine Pläne dies in Jython zu tun.
Meine Python-Skripte als JAR-Dateien mit Jython verteilen?
Sie können ganz einfach Python-Skripte (oder bash- oder Perl-Skripte) aus Java heraus mit Runtime oder ProcessBuilder aufrufen und die Ausgabe nach Java zurückgeben:
Ausführen eines bash-Shell-Skripts in Java
Befehlszeile in Java ausführen
java runtime.getruntime() Ausgabe beim Ausführen eines Befehlszeilenprogramms erhalten
Sie können jede Sprache von Java aus mit Java Native Interface aufrufen