IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Faire communiquer 2 progammes


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 121
    Points : 80
    Points
    80
    Par défaut Faire communiquer 2 progammes
    Bonsoir,

    Je souhaiterai faire 2 programmes : l'un en python, l'autre sous Lazarus qui communiquent. En fait le programme en Python pose une question et le programme en Lazarus lui répond.

    Ma première idée était de faire un fichier commun "dialogue.txt"
    Le programme en Python écrit dans le fichier, puis surveille la réponse arriver.
    Le programme en Delphi surveille les questions arriver et écrit la réponse

    Sauf que évidemment, j'ai régulièrement des plantages car l'un lit pendant que l'autre veut écrire et inversement.

    Quelqu'un aurait-il une idée de solution ?

    Merci d'avance,

    Vincent

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 140
    Points : 182
    Points
    182
    Par défaut
    Salut magicV,

    tu peux tout simplement faire un système de lock du style:

    vérifie qu un fichier lock n'existe pas
    crée fichier lock
    manipule dialogue.txt
    supprime le fichier lock

    le dialogue commence et tant que le fichier lock existe, le programme dort en attendant que le fichier soit supprimé.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 121
    Points : 80
    Points
    80
    Par défaut
    Bonsoir,

    Merci beaucoup pour cette excellente idée, ça marche très bien.

    Vincent

  4. #4
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Attention par contre au fichier de lock, car si ton programme le créant plante, ton fichier de lock ne sera pas effacé, et de fait, il risque d'empecher la bonne exécution par la suite.

    Probleme deja vecu chez un client.

    Le fichier de lock est une solution (une mauvaise à mes yeux de par mon experience pro et perso), mais avant de partir la dessus, regarde aussi du cote de subprocess et de sa cmmande popen. Elle te permettra d'appeler ton traitement, puis avec un .wait() d'attendre la fin de l'execution avant de continuer. Cerise sur le gateau, tu pourras aussi recuperer toute l'execution du traitement appelé dans un fichier de log.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Points : 129
    Points
    129
    Par défaut
    Bonjour

    Quelques autres pistes pour faire communiquer 2 programmes :
    - utiliser les sockets (import socket)
    - utiliser des système comme DBUS (surcouche aux sockets) - cette solution peut être très lourde.

    Astuce pour la méthode fichier : voir si une séparation du fichier de communication en 2 fichiers : un pour le sens programme A->B et un autre pour le sens programme B->A ne simplifie pas la communication.

    Cordialement
    Emmanuel

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    De façon générale (quelque soit le langage), un programme lit sur stdin, répond sur stdout et râle sur stderr.

    Pourquoi ne pas lancer Lazarus comme sous-process du programme Python et dialoguer directement avec via subprocess PIPE?

    C'est un mode start/wait/retry basique qui évite d'avoir a "poller" un fichier, de récupérer des informations lorsque "Lazarus" plante, de fermer le sous process "Lazarus" lorsque le script Python se termine, de tester ce que retourne Lazarus directement a la console, sans Python.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Entierement d'accord avec Wiztrick,

    J'ai decouvert les PIPE de subprocess hier apres midi, suite à un besoin de ce type de communication (IHM, sous process). C'est exactement ce qu'il te faut. Bien plus adapté que Popen à mon avis, que je te recommandais quelque post plus haut.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/11/2005, 21h24
  2. faire communiquer 2 fenetres...
    Par linux dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/08/2005, 09h51
  3. comment faire communiquer deux form MDI?
    Par eponette dans le forum Langage
    Réponses: 3
    Dernier message: 17/08/2005, 12h20
  4. [Securité] Faire communiquer 2 serveurs entre eux
    Par Wookai dans le forum Hébergement
    Réponses: 2
    Dernier message: 10/08/2005, 00h13
  5. [Technologie][Stratégie] Faire communiquer deux applis
    Par KitsuneSama dans le forum Général Java
    Réponses: 13
    Dernier message: 21/06/2004, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo