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 :

Code python qui s'arrête sans raison apparente


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par défaut Code python qui s'arrête sans raison apparente
    Bonjour.

    J'ai un script python3 qui envoie des requêtes à des balances par port RS232 pour récupérer et logger les masses mesurées.

    Ici le script utilisé:
    https://github.com/hary66/RadWag-and...TP%2BRadWag.py
    Je ne suis pas pro du code et débutant donc soyez indulgent. (après je suis à l'écoute de tout conseil)

    Le script s'arrête sans raison apparente et je ne sais pas comment faire pour détecter la cause de l'arrêt.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par hary66 Voir le message
    Le script s'arrête sans raison apparente et je ne sais pas comment faire pour détecter la cause de l'arrêt.
    Avec aussi peu d'informations c'est pas facile de t'aider.
    Déjà je vois que le script écrit un fichier log nommé "log_DGTP+RAdWag.csv". Donc aller voir ce qu'il contient (et surtout sa dernière ligne) te donnera la dernière ligne de code exécuté (enfin la dernière qui écrit le log).
    De là, tu peux rajouter des print() a des endroits qui te semblent important pour checker son avancement. Si par exemple à partir de la dernière ligne écrivant le log tu vois que le script appelle une fonction, alors tu mets un print() juste après l'appel voir si la fonction s'est exécutée.
    Et ainsi de fil en aiguille tu arriveras à identifier la ligne qui fait planter.

    De mon côté après avoir exécuté ledit script, ça plante à la ligne 60 return port car la variable n'existe pas.
    Et effectivement dans la fonction...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def choosePort():
    	portsDictionnary = checkForPorts()
    	if len(portsDictionnary) == 1:
    		port = portsDictionnary["1"]
    		print(port + " is the only port available and in use !")
    	elif len(portsDictionnary) == 0:
    		print("No serial/RS232 converter found !\nCheck for connection or add converter.\n")
    	else:
    		choosePort = str(input("Confirm the chosen port : "))
    		type (choosePort)
    		port=portsDictionnary[choosePort]
    		print ("You have choosen " + port + " as port to use !")
    	return port
    ... si on passe dans le "elif" alors la variable n'est pas créée. Mon cas est peut-être différent du tien (je teste sur une machine qui n'a pas de RS232) mais déjà c'est une indication que ce script n'est peut-être pas des plus fiables et des plus propres (c'était quand-même pas super compliqué à voir, le truc fait seulement 12 lignes !!!). Ensuite c'est un peu pareil avec ce type(choosePort) de la ligne 56 exécuté dans le vide...

    Un peu pareil avec cette fonction
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def choosePortBaudRate():
    	logger.debug('choosePortBaudRate routine')
    	Baud = input("\nEnter Baud Rate (default to 9600) : ")
    	if Baud == "":
    		Baud = 9600
    	return Baud
    Donc soit on entre une valeur vide (qui normalement se teste if not Baud) et la fonction retourne l'int 9600, soit on entre une valeur concrète style 19200 et la fonction retourne la string 19200. Bref la fonction retourne un type ou un autre selon le sens du vent. Après pour gérer...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par hary66 Voir le message
    Le script s'arrête sans raison apparente et je ne sais pas comment faire pour détecter la cause de l'arrêt.
    Mettre des prints partout peut aider à voir où ça bloque si jamais il n'y a pas d'erreur levée...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x = 5
    print('1')
    y = 6
    print('2')
    #...

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    y = 6
    print('2')
    #...
    Oui, si l'instruction y=6 plante (sait-on jamais)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre confirmé
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par défaut
    Désolé, je n'ai pas été assez clair.
    Le script fonctionne bien pendant quelques heures et puis ça s'arrête
    !

    Ici le dernier fichier de log :
    https://github.com/hary66/RadWag-and...P%2BRAdWag.csv

    Je vais revoir mon code en fonctions de vos remarques;

  6. #6
    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
    Citation Envoyé par hary66 Voir le message
    Désolé, je n'ai pas été assez clair.
    Le script fonctionne bien pendant quelques heures et puis ça s'arrête
    !
    Avec ou sans message d'erreur?

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

  7. #7
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 219
    Par défaut
    Hello,
    Citation Envoyé par hary66 Voir le message
    Je vais revoir mon code en fonctions de vos remarques;
    voici d'autres remarques :
    1 - Pour la gestion des exceptions j'aurais plutôt fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    except serial.SerialException as e:
        logger.critical("Serial error: " + str(e))
    except:
        logger.critical("Error: "  + sys.exc_info()[0])
    2 - Dans ta boucle, si il n'y a pas de données en attente dans les ports série, tu boucles en permanence ce qui doit consommer pas mal de temps CPU. Il serait judicieux de rajouter une petite temporisation (ex :! 10ms) en dernière instruction de cette boucle, par exemple :
    Ami calmant, J.P

  8. #8
    Membre confirmé
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par défaut
    Je n'avais pas pensé à vous mettre l'erreur apparaissant sur le terminal !
    C'est ici :
    https://github.com/hary66/RadWag-and...erminal_output

    le script utilisé où j'ai ajouté des N° à chaque étape selon les conseils de @LeNarvalo:
    https://github.com/hary66/RadWag-and...TP%2BRadWag.py

    et le fichier de log :
    https://github.com/hary66/RadWag-and...P%2BRAdWag.csv

  9. #9
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Citation Envoyé par hary66 Voir le message
    Je n'avais pas pensé à vous mettre l'erreur apparaissant sur le terminal !
    C'est ici :
    https://github.com/hary66/RadWag-and...erminal_output

    le script utilisé où j'ai ajouté des N° à chaque étape selon les conseils de @LeNarvalo:
    https://github.com/hary66/RadWag-and...TP%2BRadWag.py

    et le fichier de log :
    https://github.com/hary66/RadWag-and...P%2BRAdWag.csv
    Petite digression:
    Il est préférable de poster du contenu au lieu de lien (comme le préconise les règles). Cela rendra ce post plus pérenne (les liens, ça vie et ça meurt.) et plus facile à suivre...

  10. #10
    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 hary66 Voir le message
    Je n'avais pas pensé à vous mettre l'erreur apparaissant sur le terminal !
    L'erreur renvoie a un problème de communication. Il faudrait regarder ce qu'il se passe côté "balance" a ce moment là (peut être un reset)...
    In fine arbitrer sur la gestion de l'erreur (probablement ré-ouvrir le port après un certain temps, abandonner après certain nombre d'essais)...
    Vous êtes plus dans une logique de programmation réseau que "python".... et si vous voulez un code qui fonctionne en 24/24, c'est difficile à réaliser car il faut gérer des tas de cas de figures et des reprises en cas d'erreur.

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

  11. #11
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 219
    Par défaut
    Hello
    Citation Envoyé par hary66 Voir le message
    Le script fonctionne bien pendant quelques heures et puis ça s'arrête
    combien d'heures ? toujours à peu près le même nombre d'heures ? y-a-t-il un screensaver actif sur l'ordinateur ?
    Ami calmant, J.P

  12. #12
    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
    Citation Envoyé par jurassic pork Voir le message
    combien d'heures ? toujours à peu près le même nombre d'heures ? y-a-t-il un screensaver actif sur l'ordinateur ?
    Ça sort en exception au bout d'un certain temps... enfin c'est ce qu'on lit dans les réponses données par le PO.

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

  13. #13
    Membre confirmé
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par défaut
    Je n'avais pas vue ces dernières réponses et propositions !

    Et surtout, maintenant, ça à l'aire de fonctionner depuis plusieurs jours sans soucis.

    Je pense que l'ajout dans la boucle while de :
    a amélioré les choses.

    Par contre, je voudrai encore ajouter d'autres appareils qui communiquent en RS232/USB. (6, peut être 10, si celà est viable.

    Pensez vous que cela est viable ? Et comment faire tout ça proprement ?

    Je n'ai pas trouvé de tuto pour ce type d'usage. Auriez vous quelques pistes ?

Discussions similaires

  1. Mon code s'arrête sans raison
    Par michel.amoakon dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/05/2011, 00h29
  2. REGEXP_SUBSTR qui mouline sans raison apparente
    Par eparesys dans le forum SQL
    Réponses: 0
    Dernier message: 03/08/2010, 19h20
  3. RuntimeException qui apparait sans raison apparente
    Par m_piou dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 12/09/2008, 17h04
  4. fenêtre qui s'élargit sans raison apparente
    Par Lcf.vs dans le forum Mise en page CSS
    Réponses: 13
    Dernier message: 24/11/2007, 22h02
  5. Réponses: 2
    Dernier message: 17/01/2007, 19h23

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