2016-05-18 5 views
0

J'ai un script python nommé "prog.py". Je veux ajouter une fonctionnalité qui ouvre un nouveau processus qui surveille le fonctionnement du script en cours. Lorsque le script se termine, le processus reconnaît la terminaison et invoque une certaine fonction. Voici un pseudo-code:Création d'un processus en Python qui commence après la fin du processus principal

while (script is active):  

    sleep(1) # check its status once a second 

func() 

Avez-vous une idée pour le faire?

Répondre

1

Y a-t-il une raison pour laquelle l'autre processus doit être lancé en premier? On dirait que vous pourriez le faire de manière plus efficace et plus fiable juste execing lorsque le premier processus se termine. Par exemple:

import atexit 
import os 

atexit.register(os.execlp, 'afterexitscript.py', 'afterexitscript.py', 'arg1', 'arg2') 

Lorsque le processus Python courant des sorties, il sera parfaitement remplacer lui-même avec l'autre scénario, qui ne doit pas aller à la peine d'inclure une boucle d'interrogation. Ou vous pouvez simplement utiliser atexit pour exécuter ce que func est directement dans votre script principal et éviter un nouveau lancement Python.

+0

+1 pour la dernière phrase. Utilisez juste 'atexit', et ne vous occupez pas des processus à moins qu'il y ait une raison spécifique à cela. –

+0

Le problème est avec la note suivante dans la documentation atexit: "Les fonctions enregistrées via ce module ne sont pas appelées lorsque le programme est détruit par un signal non géré par Python, lorsqu'une erreur interne fatale Python est détectée, ou lorsque os._exit() est appelé." Je suis à la recherche d'une solution qui fonctionne dans tous les cas de terminaison de script ... – CrazySynthax

+0

@CrazySynthax: Dans ce cas, il serait encore plus simple de faire gérer le processus "principal" par le processus de contrôle plutôt que "processus engendrant un moniteur qui essaie ensuite de surveiller le processus principal à son tour. Le premier est un simple usage de «subprocess», le dernier implique généralement des étapes de détachement de processus spécifiques au système d'exploitation non portables et rigmarole. – ShadowRanger