2010-10-13 15 views
8

Ho due applicazioni python. Ho bisogno di inviare comandi e dati tra di loro (tra due processi). Qual è il modo migliore per farlo?Come scambiare i dati tra due applicazioni python?

Un programma è un daemon che deve accettare comandi e parametri da un'altra applicazione della GUI.

Come posso rendere demone per monitorare i comandi dalla GUI, mentre si rende il lavoro? Preferisco che la soluzione sia crossplatform.

p.s. Io uso pyqt4 e python.

+1

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

+0

Oh, link utile. Grazie. Non l'ha incappato mentre cercavo. – PocketSam

risposta

10

È possibile utilizzare i seguenti metodi per lo scambio dei dati:

  1. presa di programmazione: in Qt è possibile accedere modulo QtNetwork. Vedere l'assistente qt per gli esempi

  2. IPC: utilizzare la memoria condivisa implementata nella classe QSharedMemory.

  3. Se questa applicazione verrà eseguito sul sistema operativo UNIX solo, allora si può provare messaggio basato Posix coda ecc per lo scambio dati

  4. DBUS: Troverete sia pitone e Qt hanno DBus base di supporto. In Case of python devi trovare il modulo pertinente.

  5. Utilizzando il modulo Multi Processing

  6. Utilizzando meccanismo IPC POSIX/SystemV alias pipe, code, ecc

+0

È possibile interagire tra le applicazioni usando solo python? Ad esempio con modulo subprocess e Popen.communicate. Pensi che usare la libreria Qt sarebbe più facile? – PocketSam

+0

-1: Impossibile chiamare pipe ordinarie e ordinari sys.stdin e sys.stdout. –

+0

@S. Lott - Non sono sicuro che 'sys.stdin' sarebbe utile in questo caso se si tratta di un daemon che comunica con una GUI poiché è improbabile che una volta che il processo avvii l'altro. –

2

Mentre non è legato al modo della comunicazione, vi consiglio controllando il modulo pickle/cPickle (che può codificare oggetti in flussi di stringhe e viceversa). Molto utile.

0

Esempio.

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) 

Usage:

Program_1.py | Program_2.py 

In Windows, questo può esibire un comportamento cattivo a causa del modo in cui Windows pasticci lima semplice Reindirizzamenti IO.

Problemi correlati