Как обмениваться данными между двумя приложениями Python? - PullRequest
9 голосов
/ 13 октября 2010

У меня есть два приложения на Python. Мне нужно отправить команды и данные между ними (между двумя процессами). Каков наилучший способ сделать это?

Одна программа - это демон, который должен принимать команды и параметры из другого приложения с графическим интерфейсом.

Как я могу сделать демон для мониторинга команд из графического интерфейса, пока он работает? Я предпочитаю, чтобы решение было кроссплатформенным.

p.s. Я использую pyqt4 и python.

Ответы [ 3 ]

10 голосов
/ 13 октября 2010

Вы можете использовать следующие методы для обмена данными:

  1. Программирование сокетов: В Qt вы можете получить доступ к модулю QtNetwork. Смотрите qt assistant для примеров

  2. IPC: использовать совместно используемую память, реализованную в классе QSharedMemory.

  3. Если это приложение будет работать только на Unix OS, вы можете попробовать очередь сообщений на основе Posix и т. Д. Для обмена данными

  4. DBUS: вы обнаружите, что и Python, и Qt поддерживают DBus. В случае Python вам нужно найти соответствующий модуль.

  5. Использование модуля Multi Processing

  6. Использование механизма IPC на основе Posix / SystemV, также как каналы, очереди и т. Д.

2 голосов
/ 13 октября 2010

Хотя это не относится к способу связи, я рекомендую проверить модуль pickle / cPickle (который может кодировать объекты в потоковые потоки и наоборот).Очень полезно.

0 голосов
/ 13 октября 2010

Пример.

Program_1.py

import pickle
import sys
for i in range(100):
    pickle.dump(i,sys.stdout)

Program_2.py

from __future__ import print_function
import pickle
import sys
while True:
    obj= pickle.load(sys.stdin)
    print( obj )

Использование:

Program_1.py | Program_2.py 

Под Windows этоможет демонстрировать плохое поведение из-за способа, которым Windows загружает простые перенаправления файлового ввода-вывода.

...