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

Réseau/Web Python Discussion :

Script python pour un projet sur un Raspberry Pie


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2016
    Messages : 1
    Par défaut Script python pour un projet sur un Raspberry Pie
    Bonjour,

    Je suis actuellement en stage.Je travaille sur une carte Raspberry pie. Mon but est de vérifier la connectivité de cette carte avec le serveur au quelle elle est reliée (disant toutes les 15 minutes).

    Concrètement, je cherche à vérifier la communication avec ce serveur, si le réseau est OK le code normal s'exécute. Par contre, si il y a un problème (perte de connexion) je dois terminer les processus proprement puis reboot la carte afin de la reconnecter au réseau. Tout ça devant être exécuté automatiquement avec un script.

    Voici le script que j'ai écris pour le moment :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #!/usr/bin/python2.7
    # coding: utf8
     
    # -------------- Libraries and variable --------------------
     
    import os
    import time
     
    hostname = "vmpc5.studies-north.ou.edu."
    test=1 # loop variable
     
    # -------------- Function --------------------
     
    def ping():
    	response = os.system("ping -c 1 " + hostname)
    	return response
     
    # -------------- Main code --------------------
     
    # time.sleep(600) --> Let some time after a restart so the Rpie doesn't reboot at the infinite
     
     
    while test==1:
    	response=ping() # Look is the servor is UP or DOWN
    if response == 0:
    	print '\n', hostname, 'is up' # insert the "normal Rpie code" in exchange of this line
    	time.sleep(5) # just for the test -> will be removed in my future code
    else:
      	test=0
    	print '\n', hostname, 'is down... Rebooting'
    	#pkill -9 python :  commands to close gently all the active process before rebooting?
    	os.system("sudo shutdown -r")
    J'ai plusieurs questions sur ce sujet :

    1) Lorsque je test le ping du serveur : "response = ping()" cela m'affiche toutes les informations du ping (paquets..) en boucle dans le terminal.. J'aimerais juste avoir la valeur stockée dans ma variable afin de faire mon test plus loin dans le code, est t'il possible de cacher ses informations?

    J'avais aussi pensé à faire un ping toute les 15 minutes par exemple (pas besoin d'avoir un test toutes les secondes) mais je ne vois pas trop comment faire niveau code. Sortir ma commande de la boucle et faire des genres d'interruptions?

    2) Je cherche une commande pour fermer les processus proprement en cas de perte de connexion, après avoir cherché j'ai trouvé :

    pkill -9 python

    Je ne sais pas si cette commande est adaptée, j'aurai voulu avoir votre avis

    3) Après reboot, je veux que la carte ait le temps de se reconnecter au réseau, j'ai utilisé un time.sleep(600) afin de laisser 10 minutes. Encore une fois je ne sais pas si c'est la meilleure optimisation.

    4) Que pensez vous du code en général? Voyez vous des fautes ou des idées d'amélioration ?


    Merci d'avance pour vos réponses et vos conseils,

    Florian

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Bonjour chooper,

    1) Si tu as les informations en boucle, c'est parce que ta boucle while se fait en permanence, la variable "test" n'est jamais modifié au sein de la boucle, il faut que tu décales toutes ta partie "if...else..." d'une indentation pour être à l'intérieur de ta boucle while ^^

    2) Pour fermer les processus proprement, je t'invite à faire une petite recherche google sur du "python kill process", tu auras des solutions et ds explications bien plus détaillés que ce que je pourrais te donner.

    3) Je comprend pas bien là, ton script est exécute de quel façon? Car logiquement, lorsque la carte va rebooter, le script se va pas se relancer automatiquement. Si jamais tu utilise un cron ou que tu en as fait un daemon il va s’exécuter au même rythme que ce que tu avais avant le reboot, à savoir toutes les 15 minutes.

    4) Pour la faute je te l'ai mis au point 1.
    Pour ce qui est des améliorations je pense qu'un système d'acquittement de la perte de connexion serait pas mal. Par exemple, relancer deux autre ping a 2 minutes intervalle si jamais le test échoue pour vérifier que tu as bien perdu la connexion et non pas juste un petit problème sans importance qui aurait fait foiré le ping.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/04/2009, 16h10
  2. Réponses: 1
    Dernier message: 02/04/2009, 16h10
  3. [Cherche tuto/cours]Script Python pour Unix
    Par elflamby dans le forum Général Python
    Réponses: 2
    Dernier message: 05/09/2007, 14h38

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