IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Comment utiliser un faulthandler? [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Développeur occasionnel
    Inscrit en
    Février 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur occasionnel

    Informations forums :
    Inscription : Février 2020
    Messages : 9
    Par défaut Comment utiliser un faulthandler?
    Bonjour,
    j'ai un petit programme installé sur un PC auquel il m'est difficile de me connecter (réseau bloquant) qui devrait tourner H24 mais qui plante aléatoirement (mais pas chez moi bien sûr...)
    Le collègue qui l'utilise (à l'autre bout de la France évidemment) est fréquemment obligé de le relancer le matin en arrivant au taf, mais pas de message d'erreur...
    J'ai ajouté un try pour voir si un rigolo s'amuserait pas à le fermer dans son dos ou si une exception se produit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    except KeyboardInterrupt:
            logger.exception("Fermé par interruption clavier")
    except Exception as e:
            logging.basicConfig(filename='crash.log')
            logging.exception("CRASH:", e)
    mais rien ne sort sur le fichier de log et pas de création de fichier crash.log.
    Du coup je me tournais vers la bibliothèque faulthandler mais je ne comprends pas comment ça marche
    Voici le bout de code que j'utilise pour essais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import faulthandler
    if __name__ == "__main__":
        with open("crash.log","w") as fichier:
            faulthandler.enable(file=fichier)
        while True:
            pass
    Mais si je ferme la fenêtre (clic droit, fermer, OK pour "Do you want to kill?") , pas de message d'erreur dans crash.log
    Qu'est-ce que j'ai raté?
    Merci d'avance!

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par Cafebar Jadi Voir le message
    Mais si je ferme la fenêtre (clic droit, fermer, OK pour "Do you want to kill?") , pas de message d'erreur dans crash.log
    Un programme qui se termine via l'appel à exit() ne génère pas d'exception.

    Normalement, pour savoir ce qu'il se passe, on ajoute des informations dans le log histoire d'avoir une idée de ce qui s'est passé un peu avant que le programme se termine.

    Ça va donner des pistes qu'on essaie d'explorer pour voir où elles mènent. Et avec de la chance et un problème qui a le bon gout de se reproduire assez souvent on peut arriver à...

    De toutes façons programmer une application qui tourne de façon fiable en H24 et qui donne des indications permettant un diagnostic en cas de plantage est un exercice très difficile (même pour des programmeurs expérimentés).

    Je ne sais pas ce que votre programme fait mais si vous pouviez replacer le H24 par une tache lancée toutes les N secondes/minutes par un gestionnaire de tâche vous auriez déjà une solution plus robuste (et facile à coder).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur occasionnel
    Inscrit en
    Février 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur occasionnel

    Informations forums :
    Inscription : Février 2020
    Messages : 9
    Par défaut
    En théorie, fermer la fenêtre génère un "SIGTERM" ou équivalent (c'est sous Windows).
    Si je fais CTRL+C c'est un SIGINT et là j’intercepte bien le KeyboardInterupt.
    C'est donc les signaux SIGTERM (ou autre signal Windows ) que j'essaye de traiter, mais comment faire?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par Cafebar Jadi Voir le message
    En théorie, fermer la fenêtre génère un "SIGTERM" ou équivalent (c'est sous Windows).
    Ce n'est pas parce que le résultat est identique (fin du programme) que le chemin est le même... ne serait ce que pour lui faire faire autre chose (reprogrammer ce qui se passe lorsque l'utilisateur ferme la fenêtre principale), vous ne passez pas par l'écriture d'un signal handler.

    Citation Envoyé par Cafebar Jadi Voir le message
    C'est donc les signaux SIGTERM (ou autre signal Windows ) que j'essaye de traiter, mais comment faire?
    Si malgré tout, vous voulez suivre cette piste, il faut aller voir la bibliothèque python standard qui interface le "langage" avec les signaux.... voire trouver une bibliothèque externe plus robuste côté Windows.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour, peut-être qu'en exécutant le message sur un terminal pourrais donner l'erreur.
    chez moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    giovanni@giovanni-System-Product-Name:~$ python3 /a.py
    Traceback (most recent call last):
      File "/a.py", line 1, in <module>
        a
    NameError: name 'a' is not defined
    sous Windows ça donne ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Microsoft Windows [version 10.0.19043.985]
    (c) Microsoft Corporation. Tous droits réservés.
     
    C:\Users\gio26>python.exe c:/a.py
    Traceback (most recent call last):
      File "c:/a.py", line 1, in <module>
        print(a)
    NameError: name 'a' is not defined
     
    C:\Users\gio26>
    Dernière modification par Invité ; 11/06/2021 à 19h51. Motif: Fusion des messages + ajout des balises CODE

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur occasionnel
    Inscrit en
    Février 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur occasionnel

    Informations forums :
    Inscription : Février 2020
    Messages : 9
    Par défaut
    Bonjour,
    après moult essais et lecture, le problème reste insoluble: il semblerait que lorsque Windows ferme une fenêtre il n'y ait pas moyen de lancer du code de sortie.
    Donc il ne me reste plus qu'a demander à mon collègue de m'envoyer les events Windows pour essayer de comprendre.
    Merci à tous ceux qui ont bien voulu essayer de m'aider!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment utiliser un faulthandler
    Par stage2009 dans le forum Flex
    Réponses: 5
    Dernier message: 12/11/2010, 13h00
  2. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  3. comment utiliser actionscript ?
    Par webs dans le forum Flash
    Réponses: 3
    Dernier message: 09/02/2003, 23h11
  4. Comment utiliser OUT ?
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 20/07/2002, 09h35
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo