Bonjour,
Après plusieurs essais infructueuxje viens vers vous pour trouver un moyen d'exécuter un script python en mono-instance.
Merci de votre aide.
Bonjour,
Après plusieurs essais infructueuxje viens vers vous pour trouver un moyen d'exécuter un script python en mono-instance.
Merci de votre aide.
Qu'est que tu appel un script mono instance....
[SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit
Mon premier Tutoriel
A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...
regarde par ici => les mutex sous windows
Sinon, un peu moins pro, ton script verifie une valeur dans un fichier au lancement qui indique si ton script tourne, si il tourne tu arrêtes ton script, sinon tu modifies cette valeur, sans oublier de la reinitialiser à la fin de ton script.
A toi de voir selon ton besoin.
Par mono-instance je veux dire que mon script ne puisse être exécuté qu'une seule fois à la fois. Donc si le script est déjà lancé ne pas pouvoir le relancer.
J'ai essayé sous linux en exécutant un test sur les processus lancés. Cela fonctionne bien quand je lance le script depuis l'invité de ligne de commande, mais pas s'il est lancé automatiquement au démarrage de linux. De plus cela ne fonctionne pas sous Windows vu que j'utilise une commande linux.
Voici le boût de code :
J'avais pensé à l'idée d'un fichier flag créé au lancement du script, mais si mon script s'arrète de façon inopinée, le fichier n'est pas supprimé et impossible de relancer le script.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 import commands process = commands.getoutput("ps x -o \"%a\" |grep 'mom_script.py'") result = re.findall("mon_script.py",process) if len(result) >1 : # le script est déjà lancé !
a toi de gérer l'imprevisible....mais si mon script s'arrète de façon inopinée
Un peu plus tordu: ton script inscrit son heure de lancement dans un fichier, le remet a l'heure regulierement et un autre script lancé toutes les 5 mins verifie ce fichier et relance le script le cas echeant.
Oui j'essai bien de gérer les erreurs inopinées mais le script que j'ai trouvé ne fonctionne pas non plus :p Ce script devrait intercepter toutes les erreurs et les inscrire dans le fichier de log. Mais non il ne veut pas !![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import traceback def MyExceptHook(type, value, tb): dateHeureLog = datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S') # date et heure du log dateFichierLog = datetime.datetime.now().strftime('%Y%m%d') # date nom fichier log nomFichierLog = dateFichierLog + "_TraceAllMode.log" # nom du fichier log du jour txtLog = traceback.format_exception(type, value, tb) of = open(_gsLogPath + nomFichierLog,'a') # ouverture du fichier de log of.write(txtLog + '---------------------------------------------------------\n') # ajout de la ligne en fin de fichier of.close() # fermeture du fichier de log sys.exit(2) sys.excepthook=MyExceptHook
Partager