2010-10-13 28 views
8

Tengo dos aplicaciones de Python. Necesito enviar comandos y datos entre ellos (entre dos procesos). ¿Cuál es la mejor manera de hacerlo?¿Cómo intercambiar datos entre dos aplicaciones de Python?

Un programa es un daemon que debe aceptar comandos y parámetros de otra aplicación GUI.

¿Cómo puedo hacer que Daemon monitoree los comandos desde la GUI, mientras hace su trabajo? Prefiero que la solución sea crossplatform.

p.s. Yo uso pyqt4 y python.

+1

Similar a http://stackoverflow.com/questions/3902997/capturing-output-from-buffered-stdout-program/3905899#3905899 –

+0

Oh, enlace útil. Gracias. No lo tropecé mientras buscaba. – PocketSam

Respuesta

10

Puede utilizar los siguientes métodos para el intercambio de datos:

  1. zócalo de programación: En Qt se puede acceder módulo QtNetwork. Consulte el asistente qt para ver los ejemplos

  2. IPC: utilice la memoria compartida implementada en la clase QSharedMemory.

  3. Si esta aplicación se ejecutará en sistema operativo UNIX solamente, entonces usted puede intentar cola de mensajes, etc. basado POSIX para el intercambio de datos

  4. DBUS: Usted se encuentra tanto en Python y Qt han basado Enlace con el Bus de apoyo. En caso de python, debe encontrar el módulo correspondiente.

  5. Usando el modulo de procesamiento multi

  6. Usando mecanismo IPC basado Posix/SystemV también conocido como tuberías, cola, etc.

+0

¿Es posible interactuar entre aplicaciones usando solo python? Por ejemplo, con el módulo de subproceso y Popen.communicate. ¿Crees que usar la biblioteca Qt sería más fácil? – PocketSam

+0

-1: No se mencionaron las tuberías ordinarias y sys.stdin y sys.stdout ordinarios. –

+0

@S. Lott: no estoy seguro de que 'sys.stdin' sea útil en este caso si se trata de un daemon que se comunica con una GUI, ya que es poco probable que una vez el proceso ejecute la otra. –

2

Mientras que no se relaciona con la manera de la comunicación, recomiendo revisando el módulo pickle/cPickle (que puede codificar objetos en secuencias de cadenas y viceversa). Muy útil.

0

Ejemplo.

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) 

Uso:

Program_1.py | Program_2.py 

En Windows, esto puede exhibir un mal comportamiento debido a la forma en que Windows fracasa el archivo simple IO redirige.

Cuestiones relacionadas