2012-06-16 2 views
6

Я хочу, чтобы иметь возможность вызывать определенные методы и такие, которые содержатся в Java jar, который уже запущен (гарантируется, что он будет запущен). Я нашел такие вещи, как Jython, но они, похоже, могут получить доступ к родным классам Java и тому подобному.Вызов неместного кода Java из Python

+0

Как вы ожидаете, чтобы быть в состоянии сделать это, например, от Java? –

ответ

3

Проверить этот:. Calling Java from Python

"Вы можете также использовать Py4J Существует пример на главной странице и много документации, но, по сути, вы просто вызывать методы Java из кода питона, как если бы они были методы Python:

from py4j.java_gateway import JavaGateway 

шлюз = JavaGatew ау() # подключения к виртуальной машины Java

JAVA_OBJECT = gateway.jvm.mypackage.MyClass() # ВЫЗОВ конструктор

other_object = java_object.doThat()

other_object.doThis (1, 'ABC')

gateway.jvm.java.lang.System.out.println ('Hello World!') # вызов статического метода

В отличие от Jython, одна часть Py4J работает в Python VM, поэтому она всегда «обновлена» с последней версией Python, и вы можете использовать библиотеки, которые не работают на Jython (например, lxml). Другая часть выполняется на виртуальной машине Java, которую вы хотите вызвать.

Связь осуществляется через сокеты вместо JNI и Py4J имеет свой собственный протокол (для оптимизации некоторых случаев, для управления памятью и т.д.) "

+2

С сайта Py4J: «Обратите внимание, что Java-программу необходимо запустить перед выполнением кода Python выше. Другими словами, Py4J не запускает JVM ». ---- Перейдите на свой веб-сайт по адресу: http://py4j.sourceforge.net/index.html. – tabchas

Смежные вопросы