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 :

Comment n'instancier qu'une seule fois un programme


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2012
    Messages : 50
    Par défaut Comment n'instancier qu'une seule fois un programme
    Bonjour à tous

    j'ai lu l'article sur comment n’instancier qu'une seule fois un programme de la faq python (ici) et je dois dire que ce n'est pas ça ce que je cherche à faire,
    par contre non seulement je veux executer qu'une seule fois le programme, mais en plus si je clique une deuxieme fois sur l'icone du programme, alors que ce dernier est ouvert , la main bascule sur le programme.

    et merci pour toute propositions.

    os windows7
    python3.2
    Gui PyQt4

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Par défaut
    Bonjour,

    cet exemple de code semble correspondre à ce que tu veux: https://gist.github.com/blaxter/5413516
    Il est destiné à Pyside mais il doit fonctionner tel quel pour PyQt.

  3. #3
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    Par défaut
    Hello,

    Sinon tu as également la lib Tendo avec Singleton. Cette lib ne sert quasiment qu'à ça.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Par défaut
    Je verrais bien un simple fichier avec "non instancié" dedans quand le programme n'a jamais été lancé, celui-ci est modifié en "en cours d'instanciation" quand le programme est lancé et lors de la fermeture (doit être en GUI du coup, sans console de commande fermable) "instancié". Pour ce qui est de ta 2ème demande, le programme lit le fichier au début, bien sûr (pour savoir s'il doit se lancer, bon, il s'est déjà lancé mais on triche un peu), et s'il voit "en cours d'instanciation", il crée un autre fichier (vide) et se ferme.
    L'autre programme aura un thread (ou autre méthode d'exécution parallèle) qui tente en permanence de lire ce fichier - qui n'existe pas tant qu'une autre instance du programme n'est pas ouverte - utilise un truc du genre Tk.iconify() (sur tkinter) afin de remettre le programme au premier plan.

    J'avoue que cette méthode est un peu barbare mais elle marche.

  5. #5
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    Par défaut
    Oui mais elle a un gros defaut. SI ton programme crash, ton fichier reste en place, et au lancement suivant, impossible de le lancer...

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Avec PyQt4, j'utilise une solution avec QSharedMemory qui marche bien. En dehors de PyQt4, j'utilise une solution issue de portalocker (https://pypi.python.org/pypi/portalocker) que j'ai modifiée: http://python.jpvweb.com/mesrecettes...er_double_exec. Ceci à la suite d'une discussion sur ce forum et d'une suggestion de wiztricks (http://www.developpez.net/forums/d10...source-base64/).

    Cette solution se base non pas sur la présence ou non d'un fichier, mais sur le fait que ce fichier est ou non bloqué en écriture. De ce fait, si le 1er programme se plante, on peut le relancer parce que le plantage relâche le verrou. Ça marche sous Python 2 et 3, et c'est multiplateforme (Windows-Unix).

    Par contre, en cas de tentative d'un 2ème lancement, cela génère un message d'erreur et l'arrêt de ce 2ème lancement. Je ne sais pas donner la main automatiquement dans ce cas à l'instance en cours d'exécution: mais si quelqu'un a une solution pour ça, ça m'intéresse!

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/03/2010, 19h31
  2. [IDE]Comment télécharger VS2005 Express une seule fois?
    Par zamine81 dans le forum EDI/Outils
    Réponses: 2
    Dernier message: 05/01/2006, 18h14

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