IPC (межпроцессное взаимодействие) между python и java - PullRequest
14 голосов
/ 28 июля 2010

Во-первых, небольшое объяснение почему Я задаю этот вопрос в первую очередь: я пишу программу на python (с графическим интерфейсом wxPython), которая должна вызывать программу Java AWT из pythonи извлекать данные из него.У меня есть рабочее решение для Windows.У меня также есть внутрипроцессное решение для OSX, пока я запускаю приложение Java без головы.К сожалению, нет разумного решения, которое я нашел для запуска обоих графических интерфейсов в одном и том же процессе в OSX, потому что и AWT, и WX оба хотят первый поток и не могут совместно использовать цикл сообщений wx.

Что я хотел бы сделатьэто запустить программу на Java в отдельном процессе от моей программы на Python и установить канал или очередь или что-то для передачи данных (в частности, байтовых массивов) туда и обратно.

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

Ответы [ 5 ]

3 голосов
/ 13 июля 2013

Это решение с открытым исходным кодом, которое Google использует для IPC между Java и Python. https://code.google.com/p/protobuf/

Рекомендуется.

3 голосов
/ 28 июля 2010
3 голосов
/ 27 сентября 2010

Я пытался закодировать решение, используя каналы, но кажется, что они просто не подходят для отправки нескольких сообщений туда и обратно с потенциально большими данными. Скорее они кажутся идеальными для открытия программы в стиле «рабочий», которая запускается, отвечает и умирает.

Рассматривая программирование сокетов, я нашел здесь фантастический ресурс: https://web.archive.org/web/20080913064702/http://www.prasannatech.net/2008/07/socket-programming-tutorial.html

В учебном пособии представлены варианты TCP и UDP простой программы чата, написанной на 4 языках. В итоге я использовал и изменил TCP Java-клиент и Python-сервер.

1 голос
/ 28 июля 2010

Используйте subprocess.Popen , чтобы запустить процесс Java и установить каналы для связи с ним. Для эффективной сериализации и десериализации данных не зависящим от языка, не зависящим от платформы и расширяемым образом, взгляните на Буферы протокола (предоставлено Джон Скит !).

0 голосов
/ 25 февраля 2016

У меня была похожая ситуация, когда мне приходилось общаться между процессом Java и процессом Linux. Я использовал именованные каналы.

Попробуйте реализацию mkfifo () в python.

...