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