Честно говоря большинство способов каким-либо образом запустить Python непосредственно из JVM не работают . Они либо не совсем совместимы (в новом выпуске вашей сторонней библиотеки могут использоваться функции Python 2.6 и не будут работать с Jython 2.5), либо будут хакерскими (это может нарушиться при использовании загадочной трассировки стека JVM, которая не приведет к решению).
Мой предпочтительный способ объединить два - использовать RPC . XML RPC не является плохим выбором, если у вас есть умеренное количество данных. Это довольно хорошо поддерживается & mdash; Python имеет его в своей стандартной библиотеке. Библиотеки Java также легко найти. Теперь, в зависимости от ваших настроек, либо Java, либо Python будет сервером, принимающим соединение с другого языка.
Менее популярным, но заслуживающим рассмотрения альтернативным способом создания RPC являются протобуферы Google, которые имеют 2/3 поддержки nice rpc . Вам просто нужно предоставить свой транспортный уровень. Не так много работы и удобство написания разумно.
Другой вариант - написать обертку C вокруг тех фрагментов функциональности Python, которые вам нужно представить в Java, и использовать ее через собственные плагины JVM. Вы можете облегчить боль, перейдя с SWIG SWIG .
По сути, в вашем случае это работает так:
- Создание интерфейса SWIG для всех вызовов методов из Java в C ++.
- Создайте код C / C ++, который будет принимать ваши вызовы, и внутренне вызывать интерпретатор python с правильными параметрами.
- Преобразуйте ответ, полученный от python, и отправьте его через swig обратно в код Java.
Это решение довольно сложное, в большинстве случаев немного излишнее. Тем не менее, это стоит делать, если вы (по некоторым причинам) не можете позволить себе RPC. RPC по-прежнему будет моим предпочтительным выбором.