Korzystanie z biblioteki java z Pythona
Mam aplikację python i aplikację java. Aplikacja Pythona generuje dane wejściowe dla aplikacji java i wywołuje je w wierszu poleceń.
Jestem pewien, że musi być w tym bardziej eleganckie rozwiązanie; podobnie jak używanie JNI do wywoływania kodu C Z Javy.
Jakieś wskazówki? (FYI I ' m V. new to Python)
Wyjaśnienie (kosztem długiego pytania: przeprosiny) Aplikacja py (której nie posiadam) pobiera dane użytkownika w postaci kilku plików konfiguracyjnych. Następnie interpruje te a farmy działają na wiele (ukrytych) narzędzi za pomocą mechanizmu wtyczek. Chcę dodać obsługę funkcjonalności starszej aplikacji Java.
Więc nie ma sensu wywoływać aplikacji Pythona z aplikacji java i nie mogę uruchomić aplikacji py w środowisku jython (na JVM).
Ponieważ nie ma na to oczywistego mechanizmu, myślę, że proste wywołanie CL jest najlepszym rozwiązaniem.
6 answers
Sorry, że wskrzesiłem wątek, ale nie było zaakceptowanej odpowiedzi...
Możesz również użyć Py4J . Na stronie głównej znajduje się przykład i mnóstwo dokumentacji, ale zasadniczo, po prostu wywołujesz metody Javy z kodu Pythona, tak jakby były to metody Pythona:
>>> from py4j.java_gateway import JavaGateway
>>> gateway = JavaGateway() # connect to the JVM
>>> java_object = gateway.jvm.mypackage.MyClass() # invoke constructor
>>> other_object = java_object.doThat()
>>> other_object.doThis(1,'abc')
>>> gateway.jvm.java.lang.System.out.println('Hello World!') # call a static method
W przeciwieństwie do Jythona, Py4J działa w maszynie wirtualnej Pythona, więc jest zawsze "na bieżąco" z najnowszą wersją Pythona i możesz używać bibliotek, które nie działają dobrze na Jythonie (np. lxml). Na komunikacja odbywa się za pośrednictwem gniazd zamiast JNI.
Zastrzeżenie: jestem autorem Py4J
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
2010-09-26 22:44:28
Spójrz na Jython . To trochę jak JNI, ale zastąp C Pythonem, tzn. możesz wywoływać Pythona z Javy i vice versa. Nie jest do końca jasne, co próbujesz zrobić lub dlaczego twoje obecne podejście nie jest tym, czego chcesz.
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-01-25 00:46:46
Zawiń swój kod Java w kontenerze (Servlet / EJB).
Więc nie tracisz czasu w vm-startup i idziesz drogą do bardziej zorientowanych na usługi.
Do owijania możesz użyć jython ( tylko jeśli znasz python )
Wybierz protokół komunikacyjny, w którym można używać Pythona i Javy:
- json (zobacz www.json.org)
- rmi (Python: JPype)
- reszta
- mydło (tylko dla brave)
Wybierz coś, z czym ty lub twoi partnerzy są znani!
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-01-25 10:50:46
Jeśli naprawdę chcesz osadzić swoją aplikację Java w swoim procesie Pythona, spójrz na JPype. Zapewnia dostęp do Javy za pośrednictwem JNI.
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-02-04 12:18:07
Jak o użyciu swig: http://www.swig.org/Doc1.3/Java.html ?
Daj JCC spróbować http://pypi.python.org/pypi/JCC/2.1
JCC jest generatorem kodu do wywoływania Javy bezpośrednio z CPython. Obsługuje CPython 2.3+, kilka JRE (Sun JDK 1.4+, Apple JRE 1.4+ i OpenJDK 1.7) W systemach OS X, Linux, Solaris i Windows. Jest produkowany przez Open Source Application Foundation (OSAF, the people making) i jest wydany na licencji w stylu Apache.
Z opisu pakietu:
JCC jest generatorem kodu C++ dla tworzenie kodu kleju niezbędnego do wywołania klas Javy z CPython poprzez natywny interfejs wywoływania Javy (JNI).
JCC generuje klasy wrapperów C++, które ukrywają wszystkie krwawe szczegóły dostępu do JNI, a także zarządzanie pamięcią Javy i obiektami.
JCC generuje typy CPython, które czynią te klasy C++ dostępnymi z interpretera Pythona. JCC próbuje uczynić te typy Pythona pythonicznym, wykrywając Iteratory i Accesory właściwości. Iteratory i mapowania mogą należy również zgłosić się do WKK.
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-02-04 12:54:28