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 :

Fermeture du programme


Sujet :

Python

  1. #1
    Membre habitué
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut Fermeture du programme
    Bonjour

    J'utilise un logiciel open source developpé en Python, et lorsque j'éteinds mon ordinateur il me met un message d'erreur, aperemment ça serai Windows qui fermerai mon programme. Ce que je souhaite c'est créer des lignes de commandes dans mon programme pour que celui ci séteigne seul à la fermeture de Windows.

    Si quelqu'un pourrait m'aider.

    Merci d'avance.

  2. #2
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    C'est quoi ton programme ?

    Si tu ne veux pas que Windows stoppe python lors de sa fermeture (en quoi est-ce gênant ?), le plus simple serait que tu l'arrêtes toi-même avant de quitter Windows...

  3. #3
    Membre habitué
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut
    Bonjour,

    Le logiciel que je souhaite arreter est le logiciel privosquid, et je ne veux pas l'arreter avant de fermer Windows, je souhaite que cette manipulation se fasse automatiquement.

    Merci d'avance.

  4. #4
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    J'ai un peu regardé les sources de privosquid, c'est principalement du c.

    Seule l'interface graphique est en Python.

    En fait, l'erreur vient du fait que pour quitter le programme, tu dois normalement saisir un mot de passe. Lors de son Shutdown, win est obligé de forcer la fermeture du programme car il ne peut lui passer le mot de passe.

    Tu as toujours la solution de modifier la méthode OnQuit() de façon à supprimer la demande de mot de passe avant d'autoriser la fermeture, mais si tu as des momes qui se servent de ton micro, il leur suffira de fermer l'appli pour contourner les black-list.

    Quant à récupérer le request win de shutdown, au moment où il se produit, désolé, je ne sais pas faire.

    Il y a trop longtemps que je suis sous linux

  5. #5
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 20
    Par défaut
    Il semblerait que wx.EVT_END_SESSION puisse être utile dans ce cas précis, mais je n'ai pas trouvé de doc pour son utilisation !

    PS: Merci pour ton aide oasis
    ...et merci à alain72 bien sûr


    laurent Lefrançois , concepteur du projet privosquid mais grand débutant en python, hélas !

  6. #6
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Et bien tu vois, on en apprend tous les jours.
    La macro d'évènement wx.EVT_END_SESSION je ne la connaissais pas du tout.

    Je suppose que pour l'utiliser, c'est exactement comme pour les autres macros.

    Je t'ai fait un petit exemple, mais je ne peux pas dire si ça marche vraiment...

    En tout cas, ça ne génère pas d'erreur sous linux...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #-*- coding: utf-8 -*-
     
    import wx
     
    class MaFenetre(wx.Frame):
    	def __init__(self):
    		wx.Frame.__init__(self, None, -1, title = "test clôture de session")
    		wx.EVT_END_SESSION(self, self.OnEndSession)
     
    	def OnEndSession(self, evt):
    		self.Destroy()
     
    class MonApp(wx.App):
    	def OnInit(self):
    		f = MaFenetre()
    		f.Show(True)
    		self.SetTopWindow(f)
    		return True
     
    app = MonApp()
    app.MainLoop()

  7. #7
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 20
    Par défaut
    merci mille fois !


    Je teste ça et vous tiens au courant

  8. #8
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 20
    Par défaut
    Bon, il semble que sous windows, ça ne fonctionne pas

  9. #9
    Membre habitué
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut
    Bonjour,

    j'ai un autre code proposé par un internaute, je ne sais pas si ça peut marcher


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    def sigterm(self,sn,stack):
          try:
            os.close(self.pipe_r)
            #Ici tu peux mettre des choses que tu veux faire, genre sauver des informations
          except:
            pass
          os._exit(0)
     
    def PrivoxyStartup():
        try:
            os.chdir(getProgramFilesHome()+"/Privoxy/")
            os.startfile(getProgramFilesHome()+"/Privoxy/privoxy.lnk")
            ConfigProxy()
        except OSError:
            os.startfile(getProgramFilesHome()+"/Privoxy/privoxy.exe")
     
    signal.signal(signal.SIGTERM,self.sigterm)
    PrivoxyStartup()
    il m'a egalement precisé qu'il fallait importer le signal et l'os.

    Edité par Guigui_: merci d'utiliser les balises [Code]

  10. #10
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 20
    Par défaut
    Je vais voir ça, merci

  11. #11
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 20
    Par défaut
    On dirait que ça marche très bien cette affaire

  12. #12
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 20
    Par défaut
    Rectification, ça ne marche pas.

    En ce qui concerne EVT_END_SESSION, si celà marche bien sous linux, windows quand à lui ne semble pas apprécier puisqu'à la fermeture de session j'ai un joli message d'erreur:... la mémoire de peut pas être READ, etc...

    il semble que le problème soi lié à l'implémentation de wxMSW sous windows et donc : pas de solution !

    Merci à tous de votre aide, toutefois si quelqu'un connait la solution qu'il n'hésite pas à en faire profiter la communauté car ce petit problème semble intéresser du monde, mine de rien.

Discussions similaires

  1. Fermeture de programme
    Par PhoeniX1405 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/05/2007, 18h50
  2. Réponses: 4
    Dernier message: 26/11/2006, 23h39
  3. Fermeture de programme
    Par janego dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/07/2006, 19h06
  4. [c++] Plantage à la fermeture du programme
    Par Asmodean dans le forum C++
    Réponses: 5
    Dernier message: 21/02/2006, 13h20
  5. Réponses: 7
    Dernier message: 24/01/2005, 11h36

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