[Python] Fermer un programme

Fermé
oasis_5 Messages postés 27 Date d'inscription mardi 21 février 2006 Statut Membre Dernière intervention 8 décembre 2006 - 6 mars 2006 à 12:10
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 - 21 mars 2006 à 08:42
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.
A voir également:

13 réponses

oasis_5 Messages postés 27 Date d'inscription mardi 21 février 2006 Statut Membre Dernière intervention 8 décembre 2006 3
6 mars 2006 à 13:12
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
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
6 mars 2006 à 12:36
Salut
Si ça peut être utile:

http://tinyurl.com/psud8

Sections: Program signals et Program shutdown
0
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
6 mars 2006 à 14:03
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
oasis_5 Messages postés 27 Date d'inscription mardi 21 février 2006 Statut Membre Dernière intervention 8 décembre 2006 3
6 mars 2006 à 14:57
Je vous remercie, c'est trés sympa, je vous indiquerai si ça marche ou pas dans les prochains jours.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oasis_5 Messages postés 27 Date d'inscription mardi 21 février 2006 Statut Membre Dernière intervention 8 décembre 2006 3
6 mars 2006 à 23:24
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
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
7 mars 2006 à 09:28
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
oasis_5 Messages postés 27 Date d'inscription mardi 21 février 2006 Statut Membre Dernière intervention 8 décembre 2006 3
7 mars 2006 à 11:44
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
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
7 mars 2006 à 12:33
Essaye d'enlever complètement le self et mettre la ligne signal.signal blablabla dans la fonction "PrivoxyStart" par exemple.
0
oasis_5 Messages postés 27 Date d'inscription mardi 21 février 2006 Statut Membre Dernière intervention 8 décembre 2006 3
8 mars 2006 à 09:44
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
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
8 mars 2006 à 10:07
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
oasis_5 Messages postés 27 Date d'inscription mardi 21 février 2006 Statut Membre Dernière intervention 8 décembre 2006 3
8 mars 2006 à 12:32
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
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
8 mars 2006 à 15:42
0
oasis_5 Messages postés 27 Date d'inscription mardi 21 février 2006 Statut Membre Dernière intervention 8 décembre 2006 3
20 mars 2006 à 16:23
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
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
21 mars 2006 à 08:42
Hello,

os.close(self.pipe_r)
http://docs.python.org/lib/os-fd-ops.html#l2h-1558

os._exit(0)
http://docs.python.org/lib/os-process.html#l2h-1656

signal.signal(signal.SIGTERM,self.sigterm)
http://docs.python.org/lib/module-signal.html#l2h-2595


NB: C'est en quelque sorte une version polie de "RTFM"
0