[Python] Fermer un programme

Bonjour

Etant débutant en Python, j'utilise un logiciel en open source.
Lors de la fermeture de Windows, mon OS me dit que le programme n'est pas fermé et que c'est Windows qui va se charger de le faire.
J'aimerai écrire quelques lignes de commandes afin que mon programme detecte la fermeture de windows et qu'il se ferme automatiquement.

Je ne sais pas si ma demande est complexe ou au contraire facile.

Merci d'avance.

13 réponses

  1. Bonjour

    Je vous remercie pour cette page, j'ai pas tout compris c'est vrai, je suis débutant en python et comprendre de la programmation en anglais pour un débutant n'est pas si facil, donc si vous pouviez m'expliquer un peu svp, si bien sur vous etes disposé à le faire, j'en serai ravi.

    Merci d'avance.
    1. Contributeur
      Bon en deux mots et sans avoir tester, il faut que au démarrage de ton appli tu enregistres

      signal.signal(signal.SIGTERM,self.sigterm)
      

      et ensuite que tu crées une fonction (dans la même classe que précédement) genre:

      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)
      

      1. Je vous remercie, c'est trés sympa, je vous indiquerai si ça marche ou pas dans les prochains jours.
        1. Bonjour

          Voilà je suis à la peine malgré vos explications, j'ai bien compris la réponse, mais malheureusement je n'arrive pas à la mettre en pratique.

          Je ne sais pas ou placer les lignes de commandes.
          Je ne sais pas si il faut rajouter quelque chose avant ou aprés les lignes de commandes que vous m'avez décrit.

          Desolé de vous faire perdre votre temps, mais j'aimerai savoir si vous pouviez m'aider encor un peu si ce n'était pas trop vous demander, je me doute que deux explications pour un meme problème c'est un peu trop, mais j'essaie d'améliorer un logiciel en open source.

          Le logiciel est privosquid, et le problème n'est toujours pas résolut.
          Si vous pouviez regarder la source du programme qui se trouve sur www.privosquid.org
          et si encore une fois ce n'est pas trop vous demander, tenter de résoudre mon problème.

          Merci d'avance.
          1. Contributeur
            Hello

            Voilà je suis à la peine malgré vos explications, j'ai bien compris la réponse, mais malheureusement je n'arrive pas à la mettre en pratique.


            C'est aussi sans garantie mon explication, je ne suis pas sûr qu'elle marche :)


            Je ne sais pas ou placer les lignes de commandes.
            Je ne sais pas si il faut rajouter quelque chose avant ou aprés les lignes de commandes que vous m'avez décrit.

            A priori rien à rajouter, si ce n'est le code de l'appli (que je ne peux pas lancer, il me manque des biblio que je ne souhaite pas installer).

            Desolé de vous faire perdre votre temps, mais j'aimerai savoir si vous pouviez m'aider encor un peu si ce n'était pas trop vous demander, je me doute que deux explications pour un meme problème c'est un peu trop, mais j'essaie d'améliorer un logiciel en open source.
            Le forum est basé sur le volontariat donc je ne "perd" pas de temps, je choisi ce temps :) Et il n'y a pas de limitation de réponses, peut être un autre complètera mes réponses plus tard, peut être que ça servira à d'autre aussi...

            En gros ça devrait donner un truc dans le genre dans ton code (si tu parles bien de l'interface et non de privoxy lui même...)

            
            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()


            Note qu'il faut bien sûr importer os et signal
        2. Bonjour

          Merci pour l'aide que vous me fournissez

          Malheureusement une erreur intervient

          c:\>verif.py
          traceback<most recent call last>:
          file c:\verif.py, line 97, in ?
          signal.signal(signal.SIGTERM,self.sigterm)
          NameError: name 'self' is not defined

          donc des que j'ajoute le nom d'une fonction en définissant self

          def signaloasis(self)
          signal.signal(signal.SIGTERM,self.sigterm)

          Un autre message intervient

          c:\>verif.py
          file "c:\verif.py" line 98
          signal.signal(signal.SIGTERM,self.sigterm)
          ^
          indentation error: expected an indented block

          Si vous pouviez encore m'aider.
          1. Contributeur
            Essaye d'enlever complètement le self et mettre la ligne signal.signal blablabla dans la fonction "PrivoxyStart" par exemple.
            1. Bonjour

              Desolé d'avoir été si long, mais j'ai eu un autre problème pas de ton fait, qui m'empeche de continuer le programme.
              Aprés avoir testé ce que tu m'as dis, j'ai voulut reessayer, malheureusement un autre message d'erreur arrive.

              import wx
              import error: no module named wx

              Si ça continue, plus rien ne va marcher,
              si tu sais quelque chose merci de m'aider.
              1. Contributeur
                Celui là je le connais aussi :)
                Il faut que tu installes le package wx pour Python (c'est ce qui permet de faire des contrôles, boutons etc...)
                1. Ok trés bien mais ou trouver ce package stp, il est déjà sur mon PC ou je dois le trouver sur internet, desolé, peut etre est ce stupide mais je suis perdu.

                  Aperemment ton code marche, je suis content.

                  Une autre question, comment créer un executable du programme, j'ai py2exe mais je ne sais pas comment l'utiliser.

                  Merci d'avance.
                  1. Bonjour

                    J'aurai voulut avoir des explications concernant le code

                    import signal
                    …
                    def sigterm(self,sn,stack):
                    try:
                    os.close(self.pipe_r)
                    except:
                    pass
                    os._exit(0)
                    …
                    signal.signal(signal.SIGTERM,self.sigterm)

                    Je ne veux pas savoir à quoi cela sert mais une explication des commandes utiliser.

                    Merci d'avance.