Używanie Pythona z poziomu Javy [duplikat]
Możliwy Duplikat:
Java Python Integration
Mam dużą istniejącą bazę kodową napisaną w 100% w Javie, ale chciałbym użyć Pythona dla kilku nowych jego sekcji. Muszę trochę przetworzyć tekst i język, i wolałbym użyć Pythona i biblioteki jak NLTK , aby to zrobić.
Jestem świadomy projektu Jython, ale wygląda na to, że reprezentuje to sposób użycia Javy i jej bibliotek z poziomu Pythona, a nie na odwrót - czy mylę się co do tego?
Jeśli nie, jaka byłaby najlepsza metoda do łączenia się pomiędzy Javą i Pythonem, taka, że (najlepiej) mogę wywołać metodę w Pythonie i mieć wynik zwrócony do Javy?
Dziękuję.7 answers
Wiem o projekcie Jython, ale wygląda na to, że stanowi to sposób na używaj Javy i jej bibliotek od wewnątrz Python, a nie w drugą stronę runda - czy mylę się co do tego?Tak, mylisz się. Możesz albo wywołać interpreter wiersza poleceń, aby uruchomić kod Pythona za pomocą Jyton lub użyć kodu Pythona z Javy. W przeszłości istniał również kompilator python-to-Java, ale został wycofany z Jython 2.2
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-07 11:42:08
Napisałbym moduł Pythona do obsługi przetwarzania tekstu i języka, a następnie zbudował mały most w jython, z którym twój program java może współdziałać. Most jython będzie bardzo prosty, który tak naprawdę odpowiada tylko za przekierowanie wywołań do modułu Pythona i zwrócenie odpowiedzi z modułu Pythona do modułu Javy. Jython jest naprawdę łatwy w użyciu, a konfiguracja nie powinna zająć więcej niż 15 minut.
Powodzenia!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 12:12:29
Nie sądzę, aby można było użyć NLTK z Jython, ponieważ zależy to od Numpy, która nie jest przeniesiona do JVM. Jeśli potrzebujesz NLTK lub innego natywnego rozszerzenia CPython, możesz rozważyć użycie jakiegoś mechanizmu IPC do komunikacji między CPython a JVM. Jest to projekt pozwalający na wywołanie Cpythona z Javy, o nazwie Jepp:
Odwrotne (wywołanie kodu Javy z CPython) jest celem JPype i javaclass:
Sourceforge.net/projects/jpype/
Pypi.python.org/pypi/javaclass/0.1
Nigdy nie korzystałem z żadnego z tych projektów, więc nie mogę ślubować ich jakości.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 15:21:17
Jython jest implementacją Pythona działającą na JVM. Informacje na temat osadzania Pythona w istniejącej aplikacji Java można znaleźć w user guide .
Nie znam środowiska, w którym pracujesz, ale pamiętaj, że mieszanie języków w tej samej aplikacji może szybko doprowadzić do bałaganu. Zalecam tworzenie interfejsów Java, które reprezentują operacje, które planujesz użyć, wraz z oddzielnie pakowanymi klasami implementacji, które zawijają Kod Pythona.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 12:11:43
Moim zdaniem Jython jest dokładnie tym, na co patrzysz.
Jest to implementacja Pythona w JVM; jako taka można dowolnie wymieniać obiekty i, na przykład, dziedziczyć z klasy Javy (z pewnymi ograniczeniami).
Zauważ, że jego główna siła (bycie na szczycie JVM) jest również jego główną wadą, ponieważ nie może używać wszystkich (C)rozszerzeń Pythona napisanych w C (lub w jakimkolwiek innym skompilowanym języku); może to mieć wpływ na to, co chcesz zrobić z Twoje przetwarzanie tekstu.
Aby uzyskać więcej informacji o tym, czym jest Jython, jego potencjale i ograniczeniach, proponuję przeczytać Jython FAQ.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 12:29:52
Po prostu uruchom interpreter Pythona jako podproces z poziomu Javy.
Zapisz swoją funkcjonalność Pythona jako właściwy skrypt, który odczytuje ze standardowego wejścia i zapisuje na standardowe wyjście.
Użyj klasy Java Runtime
, aby wywołać podproces uruchamiający skrypt Pythona. Jest to bardzo proste i zapewnia bardzo czysty interfejs.
Edit
import simplejson
import sys
for request in sys.stdin.readlines():
args = simplejson.loads( request )
result = myFunction( args['this'], args['that'] )
sys.stdout.writeline( simplejson.dumps( result ) + "\n" )
Interfejs jest prosty, uporządkowany i bardzo niski narzut.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 12:24:26
Pamiętaj, aby najpierw sprawdzić od tych, którzy płacą za rozwój, że są w porządku z bazą kodową potrzebującą programisty, który zna zarówno Python i Java od teraz, i inne efekty kosztów i konserwacji, które niewątpliwie już uwzględniłeś.
Zobacz: http://www.acm.org/about/se-code 1.06, 2.03, 2.09, 4.03, 4.05, 6.07
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 17:45:24