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 :

Redémarrer un script Python s'il s'arrête à cause d'une quelconque erreur


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Par défaut Redémarrer un script Python s'il s'arrête à cause d'une quelconque erreur
    Bonjour à tous,
    J'ai un script Python sur une raspberry qui tourne 24 heures sur 24 et qui utilisent une communication avec mon serveur sur Internet et en USB avec une arduino, sachant que ce boîtier doit être autonome il arrive parfois que il y a une erreur de connexion ou de communication en USB et si cela arrive alors le script ne tourne plus et je reçois plus d'informations je voudrais savoir comment faire dans le cas où il y a une quelconque erreur dans le script alors le scripte redémarre automatiquement où que même la Raspberry redémarre je ne trouve absolument pas de solution depuis 2 semaines

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,

    Citation Envoyé par jawad-gods Voir le message
    je voudrais savoir comment faire dans le cas où il y a une quelconque erreur dans le script alors le scripte redémarre automatiquement où que même la Raspberry redémarre je ne trouve absolument pas de solution depuis 2 semaines
    Plutôt que d'essayer de faire tourner un script pour une durée indéfinie, vous pourriez le lancer toutes les minutes pour ne faire qu'une opération via l'utilitaire système "cron".
    Sinon, il faut attraper l'erreur (try... except...) et relancer le script via os.exec*.

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

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Par défaut pas possible de le relancer a chaque fois
    merci pour ta réponse !
    c'est une bonne idée mais cela ne correspond pas a mes besoin de l'arret a chaque fois puis le redemander ! par contre l'idée du "try" "excepte" me parez la plus plausible ! mais je ne connais pas os.exec*

    si j'arrive a detectd dans le "excepted" l'erreur suivante :
    Max retries exceeded with url: /post (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000019E893F8A90>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed',))
    cela pourrais le faire

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jawad-gods Voir le message
    c'est une bonne idée mais cela ne correspond pas a mes besoin de l'arret a chaque fois puis le redemander !
    Bonjour

    Il te faut encapsuler ton script dans quelque chose de plus grand qui, lui, se charge de le surveiller. Le truc "plus grand" n'est même pas obligé d'être du Python. Ca peut être du shell (souvent plus adapté à ce travail) ou alors Python le fait aussi de façon peut-être plus fine mais qu'il te faut programmer alors toi-aussi de façon plus détaillée.

    Citation Envoyé par jawad-gods Voir le message
    par contre l'idée du "try" "excepte" me parez la plus plausible !
    Mouais. Ben va voir sur le net comment l'utiliser et surtout sa syntaxe !!!

    Citation Envoyé par jawad-gods Voir le message
    mais je ne connais pas os.exec*
    Ca permet à un script Python de lancer un programme externe (exemple os.exec("vi /etc/passwd")). Le script Python s'arrête alors tant que le programme externe n'est pas terminé. Ensuite il reprend et continue. Eventuellement il peut savoir l'état final du programme lancé car tout programme retourne un état 0 ou autre et cet état est récupéré et lui-même renvoyé par la fonction os.exec() (et conventionellement on associe l'état "0" à "ok").
    Donc si tu crées un second script Python; tu peux lui faire appeler le premier avec os.exec() et quand le premier se termine, tu sais comment il s'est terminé.

    Citation Envoyé par jawad-gods Voir le message
    si j'arrive a detectd dans le "excepted" l'erreur suivante :
    Max retries exceeded with url: /post (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000019E893F8A90>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed',))
    cela pourrais le faire
    Il te faut lancer ton script manuellement, regarder en sortie l'erreur exacte Python qu'il te sort.
    Ensuite, tu intèges cette erreur (qu'on appelle maintenant "exception") dans ton try...except.
    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
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ca permet à un script Python de lancer un programme externe (exemple os.exec("vi /etc/passwd")).
    os.exec* remplace le programme courant par un autre (éventuellement le même). C'est bien plus violent qu'un os.system. J'ai posté un exemple dans cette discussion récente.

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

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    os.exec* remplace le programme courant par un autre (éventuellement le même). C'est bien plus violent qu'un os.system.
    Oui, t'as raison, pardon. J'ai effectivement confondu les deux et expliqué os.exec() en pensant à os.system(). Et en plus j'ai été prof de C système où j'expliquais le fonctionnement des primitives execl(), execv() et autres...
    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]

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/04/2014, 18h02
  2. Agir si un script Python s'arrête.
    Par rambc dans le forum Général Python
    Réponses: 14
    Dernier message: 14/11/2009, 10h48
  3. Réponses: 7
    Dernier message: 18/04/2008, 20h07
  4. Interpreter un script python dans un prog python
    Par romeo9423 dans le forum Général Python
    Réponses: 3
    Dernier message: 01/12/2005, 16h16
  5. Réponses: 3
    Dernier message: 05/04/2005, 14h26

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