Python: Arrêter un script proprement

J'utilise de temps en temps des scripts Python qui sont exécutés en tâche de fond sur mon système.

Le principe, une fonction main contenant le code à exécuter et une boucle while infinie qui exécute la fonction main.

#!python3
# -*- coding: UTF-8 -*-
import time

def main():
    ....

if __name__ == '__main__':
    while True:
        main()
        time.sleep(3)

Toutes les 3 sec, la fonction main est exécutée.

Le seul moyen d'arrêter le script, ctrl+c dans la console sans savoir où le script en est vraiement, au risque de l'arrêter pendant l'écriture de données dans un fichier et de corrompre ledit fichier.

Petite astuce, à mettre dans tous ses scripts exécutés en tâche de fond:

#!python3
# -*- coding: UTF-8 -*-
import time
from pathlib import Path
import sys

def main():
    ....

if __name__ == '__main__':
    while True:
        main()
        if Path('.kill').exists() and Path('.kill').read_text() == Path(sys.argv[0]).name:
            break
        time.sleep(3)
    sys.exit(0)

L'astuce consiste à utiliser un fichier .kill, dans le même répertoire que le script Python, et d'y écrire le nom exact du script concerné.

Ajouter un commentaire

Filtered HTML

  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Cette question permet de s'assurer que vous êtes un utilisateur humain et non un logiciel automatisé de pollupostage.
CAPTCHA visuel
Entrez les caractères (sans espace) affichés dans l'image.