12
votes

Comment échanger des données entre deux applications Python?

J'ai deux applications Python. J'ai besoin d'envoyer des commandes et des données entre eux (entre deux processus). Quelle est la meilleure façon de faire ça?

Un programme est un démon qui devrait accepter des commandes et des paramètres d'une autre application d'interface graphique.

Comment puis-je faire du démon pour surveiller les Comands de l'interface graphique, tout en faisant son travail? Je préfère la solution serait crossplateform.

P.s. J'utilise Pyqt4 et Python.


2 commentaires

Similaires à Stackoverflow.com/ Questions / 3902997 / ...


Oh, lien utile. Merci. N'a pas trébuché pendant la recherche.


3 Réponses :


10
votes

Vous pouvez utiliser les méthodes suivantes pour l'échange de données:

  1. PROGRAMMATION DE LA SOCKET: En Qt, vous pouvez accéder au module QTnetwork. Voir Assistant QT pour des exemples
  2. IPC: Utilisez la mémoire partagée mise en œuvre dans QsharedMemory Class.

  3. Si cette application fonctionnera uniquement sur UNIX OS uniquement, vous pouvez essayer la file d'attente de messages basée sur POSIX, etc. Pour l'échange de données

  4. DBU: Vous trouverez à la fois Python et QT ont un support basé sur la DBU. En cas de python, vous devez trouver le module correspondant.

  5. Utilisation du module multi-traitement

  6. Utilisation du mécanisme IPC basé sur POSIX / SYSTEMV AKA Tipes, la file d'attente, etc.


5 commentaires

Est-il possible d'interagir entre les applications en utilisant uniquement Python? Par exemple avec le module de sous-processus et le popen.commiquez. Vous pensez que l'utilisation de la bibliothèque QT serait facile?


-1: Impossible de mentionner des tuyaux ordinaires et des SYS.STDIN et SYS.STDOUT ordinaires.


@S. Lott - Je ne suis pas sûr que sys.stdin serait utile dans ce cas s'il s'agit d'un démon communiquant avec une interface graphique car il est peu probable qu'une fois le processus lancerait l'autre.


@Dave Webb: Peut-être. Cependant, j'ai écrit des interfaces interfaces de l'interface graphique et communiquent avec le sous-processus STDIN et STDOUT. Donc, je pense que c'est viable.


@Pocketsam Vous devriez pouvoir utiliser le module multiprofessionnel et le faire aussi. J'ai utilisé le module multiprocessionnant et ça marche bien.



2
votes

Bien que ce ne soit pas lié à la de la communication, je vous recommande de vérifier le module de cornichon / cpickle (qui peut encoder des objets dans des flux de chaîne et inversement). Très utile.


0 commentaires

0
votes

exemple.

programme_1.py p> xxx pré>

programme_2.py p> xxx pré>

utilisation: p>

Program_1.py | Program_2.py 


0 commentaires