Интеграция Jython Cpython - PullRequest
3 голосов
/ 18 мая 2010

Я собираюсь начать проект, в котором я, вероятно, буду использовать PyQt или Pyside.

Мне нужно будет взаимодействовать с ошибочным сторонним компонентом серверного программного обеспечения, которое предоставляет API C ++ и Java. API-интерфейсы Java намного проще в использовании, потому что вы получаете исключения, когда с библиотеками C ++ вы получаете segfaults. Кроме того, привязки Python к API Java являются автоматическими с Jython, тогда как привязки Python для API C ++ не существуют.

Итак, как клиентское приложение CPython PyQt сможет взаимодействовать с этими API-интерфейсами Java? Как бы вы поступили об этом?

Хотели бы вы иметь другой отдельный процесс Java на клиенте, который сериализует / выбирает объекты и связывается с процессом PyQt через сокет?

Я не хочу заново изобретать колесо ... есть ли какой-то стандартный интерфейс для подобных вещей? Какие технологии я должен изучить? RPC, Corba и т.д?

Спасибо, ~ Eric

Ответы [ 5 ]

4 голосов
/ 19 мая 2010

Вы можете вызывать Java из C-Python через JPype

http://jpype.sourceforge.net/

3 голосов
/ 20 августа 2010

Пожалуйста, смотрите связанный вопрос, где я рекомендовал execnet. Кажется, это правильное решение для подобных проблем, если вы хотите написать интеграцию на Python (как я).

0 голосов
/ 19 мая 2010

Если критерий не изобретает колесо заново, в стандартной библиотеке есть модули SimpleXMLRPCServer и xmlrpclib. Они должны работать и в Jython.

0 голосов
/ 19 мая 2010

Похоже, есть привязки Java для Qt. (Google: "Java Qt bindings")

Может быть, было бы проще использовать их из Jython.

Qt Jambi: http://en.wikipedia.org/wiki/Qt_Jambi

или

Qt Java: http://sourceforge.net/projects/qtjava/

(сам не пробовал, поэтому не знаю, насколько хорошо они будут работать.)

И здесь является соответствующим потоком SO.

0 голосов
/ 19 мая 2010

Если вы хотите сохранить полную изоляцию и повысить надежность (сторонняя библиотека отключается и не забирает ваш клиент, и если она глючит, я бы порекомендовала это), то, возможно, что-то вроде CORBA - путь вперед. Не забывайте, что в стандартную комплектацию Java входит реализация CORBA, поэтому вам просто нужно сгенерировать прокси C из IDL.

Swig может быть интересен, если вы хотите запускать вещи в процессе. Это упрощает привязку компонентов на разных языках. В частности, обратите внимание, что создает привязки для Python и Java .

...