[Python] Fermer un programme

oasis_5 Messages postés 27 Statut Membre -  
teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   -
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. oasis_5 Messages postés 27 Statut Membre 3
     
    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
  2. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    Salut
    Si ça peut être utile:

    http://tinyurl.com/psud8

    Sections: Program signals et Program shutdown
    0
  3. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    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)
    

    0
  4. oasis_5 Messages postés 27 Statut Membre 3
     
    Je vous remercie, c'est trés sympa, je vous indiquerai si ça marche ou pas dans les prochains jours.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. oasis_5 Messages postés 27 Statut Membre 3
     
    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.
    0
    1. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
       
      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
      0
  7. oasis_5 Messages postés 27 Statut Membre 3
     
    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.
    0
  8. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    Essaye d'enlever complètement le self et mettre la ligne signal.signal blablabla dans la fonction "PrivoxyStart" par exemple.
    0
  9. oasis_5 Messages postés 27 Statut Membre 3
     
    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.
    0
  10. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    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...)
    0
  11. oasis_5 Messages postés 27 Statut Membre 3
     
    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.
    0
  12. oasis_5 Messages postés 27 Statut Membre 3
     
    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.
    0