Rechercher : dans
Par :

[Python] Fermer un programme

Dernière réponse le 21 mar 2006 à 08:42:36 oasis_5, le 6 mar 2006 à 12:10:13 
 Signaler ce message aux modérateurs

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.

Meilleures réponses pour « [Python] Fermer un programme » dans :
Votre première application graphique avec Python et Glade VoirCe guide vous aidera à créer pas à pas votre première application graphique. Nous allons utiliser le langage de programme Python et l'API graphique GTK, en utilisant le logiciel Glade pour créer facilement les interfaces graphiques. C'est de la...
[Programmation] Comment débuter, quel langage? VoirComment débuter, quel langage? Introduction Ceux que l'on peut utiliser Delphi/Pascal Java Python .Net Smalltalk Ceux que l'on peut utiliser à la rigueur C/C++ PHP Ada Lisp/Caml/... Ceux que l'on peut ne pas utiliser
Démarrer un programme en tant que service (démon) VoirParfois il peut être utile qu'un programme démarre en même temps que l'ordinateur. Cet article va vous expliquer comment procéder pour utiliser un programme normal en tant que service (démon). A titre d'exemple, nous allons créer un mini-serveur...

1

teebo, le 6 mar 2006 à 12:36:47

Salut
Si ça peut être utile:

http://tinyurl.com/psud8

Sections: Program signals et Program shutdown La vérité pure et simple ?
La vérité est rarement pure et jamais simple.

O.Wilde

Répondre à teebo

2

oasis_5, le 6 mar 2006 à 13:12:38

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.

Répondre à oasis_5

3

teebo, le 6 mar 2006 à 14:03:15

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)

La vérité pure et simple ?
La vérité est rarement pure et jamais simple.
O.Wilde

Répondre à teebo

4

oasis_5, le 6 mar 2006 à 14:57:25

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

Répondre à oasis_5

5

oasis_5, le 6 mar 2006 à 23:24:00

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.

Répondre à oasis_5

6

teebo, le 7 mar 2006 à 09:28:09

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
La vérité pure et simple ?
La vérité est rarement pure et jamais simple.
O.Wilde

Répondre à teebo

7

oasis_5, le 7 mar 2006 à 11:44:20

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.

Répondre à oasis_5

8

teebo, le 7 mar 2006 à 12:33:49

Essaye d'enlever complètement le self et mettre la ligne signal.signal blablabla dans la fonction "PrivoxyStart" par exemple.
La vérité pure et simple ?
La vérité est rarement pure et jamais simple.

O.Wilde

Répondre à teebo

9

oasis_5, le 8 mar 2006 à 09:44:28

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.

Répondre à oasis_5

10

teebo, le 8 mar 2006 à 10:07:32

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...)
La vérité pure et simple ?
La vérité est rarement pure et jamais simple.

O.Wilde

Répondre à teebo

11

oasis_5, le 8 mar 2006 à 12:32:34

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.

Répondre à oasis_5

12

teebo, le 8 mar 2006 à 15:42:39

Re! :)

Pour wx:
http://www.wxpython.org/download.php#binaries

Pour py2exe:
http://www.free2code.net/plugins/articles/read.php?id=395 La vérité pure et simple ?
La vérité est rarement pure et jamais simple.

O.Wilde

Répondre à teebo

14

oasis_5, le 20 mar 2006 à 16:23:20

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.

Répondre à oasis_5

15

 teebo, le 21 mar 2006 à 08:42:36

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" La vérité pure et simple ?
La vérité est rarement pure et jamais simple.

O.Wilde

Répondre à teebo
Collection CommentÇaMarche.net