Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

arret de l'exécution d'un script

6 réponses
Avatar
m.banaouas
bonjour,
Depuis un script python, comment peut-on intercepter l'arret d'exécution
du script lui-même ?
Cet arret est déclenché par un Crtr-C depuis la fenetre de commande.
Ou bien la fin programmée par un planificateur de tâche.
Ca peut être aussi l'os avant l'arret de la session et/ou du système
lui-même.

plateforme: winXp, python 2.4.4

merci.

6 réponses

Avatar
hg
m.banaouas wrote:

bonjour,
Depuis un script python, comment peut-on intercepter l'arret d'exécution
du script lui-même ?
Cet arret est déclenché par un Crtr-C depuis la fenetre de commande.
Ou bien la fin programmée par un planificateur de tâche.
Ca peut être aussi l'os avant l'arret de la session et/ou du système
lui-même.

plateforme: winXp, python 2.4.4

merci.


Proposition:

Lancer ton script (script 2) depuis un _autre_ script (script 1)
avec 'execvpe' ou équivalent, et regarder le code de retour de (script 2)
depuis (script 1)

hg

Avatar
m.banaouas
m.banaouas wrote:

bonjour,
Depuis un script python, comment peut-on intercepter l'arret d'exécution
du script lui-même ?
Cet arret est déclenché par un Crtr-C depuis la fenetre de commande.
Ou bien la fin programmée par un planificateur de tâche.
Ca peut être aussi l'os avant l'arret de la session et/ou du système
lui-même.

plateforme: winXp, python 2.4.4

merci.


Proposition:

Lancer ton script (script 2) depuis un _autre_ script (script 1)
avec 'execvpe' ou équivalent, et regarder le code de retour de (script 2)
depuis (script 1)

hg

on n'a pas accès à une fonction de type atexit (c) ou bien

l'interception d'un signal de puis le système ? A moins que ce ne soit
python.exe le destinataire de tous les messages de l'os.


Avatar
Jonathan Barnoud
bonjour,
Depuis un script python, comment peut-on intercepter l'arret d'exécution
du script lui-même ?
Cet arret est déclenché par un Crtr-C depuis la fenetre de commande.
Ou bien la fin programmée par un planificateur de tâche.
Ca peut être aussi l'os avant l'arret de la session et/ou du système
lui-même.

plateforme: winXp, python 2.4.4

merci.


Intercepter l'exception KeyboardInterrupt ?

Jonathan Barnoud

Avatar
MC
Bonjour !

Je vois plusieurs cas :
- le script est arrêté normalement (par le script lui-même). Atexit()
pourra intercepter (saus dans certains cas de scripts/python
embarqués).
- le script est arrêté par Python (exception par exemple). Là, je ne
sais pas comment intercepter.
- le script est arrêté par l'OS avec passage d'un message (à Python)
(fermeture de session, taskkill simple, Ctrl-C. Il est impossible de
faire du callback depuis l'OS. Il faudrait voir avec un thread, et la
série des PumpMessages. Mais attention, win n'attends qu'un certain
temps, assez court.
- le script est arrêté par l'OS sans passage d'un message (taskkill
forcé, par exemple).Là, rien à faire, l'OS travaillant sans s'occuper
de l'application.







--
@-salutations

Michel Claveau
Avatar
hg
m.banaouas wrote:

m.banaouas wrote:

bonjour,
Depuis un script python, comment peut-on intercepter l'arret d'exécution
du script lui-même ?
Cet arret est déclenché par un Crtr-C depuis la fenetre de commande.
Ou bien la fin programmée par un planificateur de tâche.
Ca peut être aussi l'os avant l'arret de la session et/ou du système
lui-même.

plateforme: winXp, python 2.4.4

merci.


Proposition:

Lancer ton script (script 2) depuis un _autre_ script (script 1)
avec 'execvpe' ou équivalent, et regarder le code de retour de (script 2)
depuis (script 1)

hg

on n'a pas accès à une fonction de type atexit (c) ou bien

l'interception d'un signal de puis le système ? A moins que ce ne soit
python.exe le destinataire de tous les messages de l'os.


Ton problème est que tu es sous XP (sigh) ... et que sans intégrer pywin32
(merci MH encore et encore) ... tu n'as pas le contrôle parfait de ton
appli.

Par contre, je ne vois rien dans cette doc:
http://docs.python.org/lib/module-signal.html qui exclut Windows ... si
c'est vrai alors tu as une chance ... maintenant, je ne connais pas
le "mapping" entre les signaux *nix et windows.

hg



Avatar
m.banaouas
dans le cas d'une exception, un try except devrait suffir.

Sauf indication contraire, mon script se retrouve isolé de l'os par
l'interpretteur python.exe. Je n'arrive pas à trouver un moyen de faire
rappeler le script par python.exe dans les cas pré-cités, , ou dit
autrement, piloter python.exe par le script, même si ce pilotage se fait
par des sortes de callback.

La solution qui consiste à contrôler l'exécution du script principal par
un autre ne résout pas le pb, car à la base il s'agit de trouver un
moyen de garder le contrôle suite aux évènements en question. Si on y
arrive, alors il n'y a pas besoin de le déléguer à un 2eme script.

Bonjour !

Je vois plusieurs cas :
- le script est arrêté normalement (par le script lui-même). Atexit()
pourra intercepter (saus dans certains cas de scripts/python embarqués).
- le script est arrêté par Python (exception par exemple). Là, je ne
sais pas comment intercepter.
- le script est arrêté par l'OS avec passage d'un message (à Python)
(fermeture de session, taskkill simple, Ctrl-C. Il est impossible de
faire du callback depuis l'OS. Il faudrait voir avec un thread, et la
série des PumpMessages. Mais attention, win n'attends qu'un certain
temps, assez court.
- le script est arrêté par l'OS sans passage d'un message (taskkill
forcé, par exemple).Là, rien à faire, l'OS travaillant sans s'occuper de
l'application.