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 :

Vos avis sur mon d�but de code.


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 26
    Par d�faut Vos avis sur mon d�but de code.
    Bonjour,

    Je viens vous pr�senter un bout de code pour avoir vos avis et savoir si je pars dans la bonne direction. Le projet, c'est de piloter une ventilation et faire une r�gulation avec un capteur de temp�rature. J'utilise un Raspberry Pi pour communiquer avec mon capteur de temp�rature et la ventilation.

    J'ai r�fl�chis un bon moment, pour comprendre comment bien interfacer le toute. Car je voudrais pouvoir utiliser une commande pour allumer/�teindre la ventilation, pour activer/d�sactiver la r�gulation et d�finir une temp�rature de r�gulation. Je n'ai pas eu de probl�me pour cr�er un bout de code qui pilote la ventilation ou qui r�gule la temp�rature. Par contre j'ai du mal � comprendre comment faire pour communiquer avec mon processus qui tourne car quand je suis en mode r�gulation, il est dans une boucle infinie pour la lecture de temp�rature pour savoir si la ventilation doit �tre allum�e ou �teinte. L'id�e que j'ai eu (mais je ne sais pas si c'est la bonne), c'est de faire un deamon avec un script init ou systemd (je verrais par la suite le choix). Je me suis document� sur la programmation syst�me et j'ai �crit un bout de code qui enregistre le PID du programme, d�tecte si le programme tourne et le tue si il le faut. Voici le bout de code, pour la partie r�gulation et pilotage de la ventilation, je vais importer un module avec une classe:

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    #!/usr/bin/python3
    # -*- coding: utf8 -*-
     
    PIDFILE   = "/tmp/extractorFan.pid"
    CACHEFILE = "/tmp/extractorFan.cache"
     
    import os
    import argparse
    import signal
    import sys
     
     
    pid = str(os.getpid())
     
    def quit(signal, frame):
        if os.path.isfile(PIDFILE):
            os.remove(PIDFILE)
        sys.exit(0)
     
    signal.signal(signal.SIGINT, quit)
     
     
    arguments = argparse.ArgumentParser()
     
    arguments.add_argument("-d", "--debug", action="store_true", help="Debug mode")
    arguments.add_argument("-r", "--regulation", nargs=1, help="Regulation: ON|OFF")
    arguments.add_argument("-s", "--start", action="store_true", help="Start extractor fan")
    arguments.add_argument("-S", "--stop", action="store_true", help="Stop extractor fan")
    arguments.add_argument("-t", "--temp", nargs=1, type=int, help="Set temparture")
     
    args = arguments.parse_args()
     
    def debug(message):
        if args.debug == True:
            sys.stdout.write(message + "\n")
     
    debug(pid)
     
    if args.start:
        if os.path.isfile(PIDFILE):
            try:
                with open(PIDFILE, 'r') as f:
                    oldpid = int(f.read())
                os.kill(oldpid, signal.SIGQUIT)
                os.remove(PIDFILE)
            except:
                msg = "Can't kill pid\n"
                arguments.exit(4, message = msg)
        debug("Start ventil")
     
    elif args.stop:
        if os.path.isfile(PIDFILE):
            try:
                with open(PIDFILE, 'r') as f:
                    oldpid = int(f.read())
                os.kill(oldpid, signal.SIGQUIT)
                os.remove(PIDFILE)
            except:
                msg = "Can't kill pid\n"
                arguments.exit(4, message = msg)
        debug("Stop ventil")
     
    elif args.temp:
        debug("temp %s" % args.temp)
     
    elif args.regulation:
        if args.regulation == ['on']:
            if os.path.isfile(PIDFILE):
                msg = "Now regulation on\n"
                arguments.exit(3, message = msg)
            try:
                with open(PIDFILE, 'w') as f:
                    f.write(pid)
            except:
                msg = "Can't create pid\n"
                arguments.exit(5, message = msg)
            while True:
                debug("Regulate" % args.regulation)
        elif args.regulation == ['off']:
            if os.path.isfile(PIDFILE):
                try:
                    with open(PIDFILE, 'r') as f:
                        oldpid = int(f.read())
                    os.kill(oldpid, signal.SIGQUIT)
                    os.remove(PIDFILE)
                except:
                    msg = "Can't kill pid\n"
                    arguments.exit(4, message = msg)
            debug("%s" % args.regulation)
        else:
            arguments.error("For regulation choose ON or OFF\n")
     
    else:
        debug(arguments.parse_args(['-h']))
     
    debug("Bye")
     
    # vim: ft=python ts=8 et sw=4 sts=4
    Si vous pouviez me donner votre avis car je me demande si c'est une bonne pratique.? J'ai encore une interrogation: pour la r�gulation, j'aimerais pouvoir lui transmettre une nouvelle temp�rature pour la r�gulation et je n'ai pas d'autre id�e que de tuer le processus et de le relancer un nouveau processus avec la nouvelle temp�rature. Je pourrais avoir quoi comme possibilit� pour dialoguer avec un processus en cours??

    Merci pour vos future r�ponse
    Salutation

  2. #2
    Membre extr�mement actif
    Profil pro
    D�veloppeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activit� : D�veloppeur
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 26
    Par d�faut
    Merci beaucoup pour ce lien, je pense que je vais trouver mon bonheur. Il me manquait le terme dialoogue inter-process, je vais orienter mon apprentissage la dessus.

    Sinon concernant mon bout de code, c'est une mani�re correcte et performante de d�velopper un deamon en python sous linux?

    Salutation

  4. #4
    Membre extr�mement actif
    Profil pro
    D�veloppeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activit� : D�veloppeur
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par d�faut
    A propos de "est-ce la mani�re correcte...?"

    Je d�bute en python (j'ai fait du perl, .net, java android...).
    Je pense que du point de vue programmation tu es dans le bon.
    Juste une remarque: �vite ce genre de code:

    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
    def quit(signal, frame):
        if os.path.isfile(PIDFILE):
            os.remove(PIDFILE)
        sys.exit(0)
     
    signal.signal(signal.SIGINT, quit)
     
     
    arguments = argparse.ArgumentParser()
     
    arguments.add_argument("-d", "--debug", action="store_true", help="Debug mode")
    arguments.add_argument("-r", "--regulation", nargs=1, help="Regulation: ON|OFF")
    arguments.add_argument("-s", "--start", action="store_true", help="Start extractor fan")
    arguments.add_argument("-S", "--stop", action="store_true", help="Stop extractor fan")
    arguments.add_argument("-t", "--temp", nargs=1, type=int, help="Set temparture")
     
    args = arguments.parse_args()
    La partie rouge devrait se trouver en bas de page avant le "bye".
    Tu gagnes en lisibilit�.
    Et perso, je mettrais les import avant les variables globales et un try exception par fonction (si le code n'est pas blind�)

Discussions similaires

  1. [exercice] Donnez-moi vos avis sur mon code
    Par loukiluk dans le forum C++
    R�ponses: 19
    Dernier message: 17/05/2012, 19h21
  2. [Projet en cours] Tetris amateur - vos avis sur mon code ?
    Par NainTernaute dans le forum Projets
    R�ponses: 24
    Dernier message: 04/05/2010, 22h44
  3. Vos avis sur mon site
    Par kodokan dans le forum Mon site
    R�ponses: 11
    Dernier message: 10/10/2006, 21h06
  4. R�ponses: 1
    Dernier message: 06/10/2006, 21h03
  5. Vos avis sur mon site perso
    Par Fildz dans le forum Mon site
    R�ponses: 12
    Dernier message: 19/08/2006, 22h07

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