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 :

incompréhension logique 3.5>3.75


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Par défaut incompréhension logique 3.5>3.75
    Bonjour,

    Voila mon 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
    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
    #!/usr/bin/env python
    import getpass
    import sys
    import os
    import commands
    import string
     
    STATE_OK=0
    STATE_WARNING=1
    STATE_CRITICAL=2
    STATE_UNKNOWN=3
     
    #recuperation de l'ip de la sonde
    HOTE = sys.argv[1]
     
    OID = sys.argv[2]
     
     
    valeur2 = sys.argv[3]
    warning2 = sys.argv[4]
    critical2 = sys.argv[5]
    #requete snmp sur l'OID de t a sonde
    commande = 'snmpget -v 1 -c public ' + HOTE +' '+ OID +' ' +'''| awk '{ print $4 } ' '''
    resultat= commands.getoutput(commande)
    #puissance = float(resultat)
    #cpt=resultat.find('string:')  # a remplacer au besoin suivant ce que renvoie la commande snmpget precedente
    valeur = eval(valeur2)
    warning = eval(warning2)
    critical = eval(critical2)
    puissance = eval(resultat)
    #puissance = float(resultat)
    #puissance = resultat
    print puissance
    print valeur
    print warning
    print critical
    print puissance >= (valeur - warning) and puissance <= (valeur + warning)
     
    if puissance >= (valeur - warning) and puissance <= (valeur + warning) :
       print "Normal"
       sys.exit(STATE_OK)
    #if puissance >= valeur -critical and puissance <= valeur - critical :
    #   print "Danger"
    #   sys.exit(STATE_WARNING)
    #if puissance < valeur -critical or puissance > valeur - critical :
    #   print "Critique"
    #   sys.exit(STATE_CRITICAL)
    #si rien trouver
    print "resultat inconnu"
    sys.exit(STATE_UNKNOWN)
     
    print resultat
     
    print puissance
    voila ce qu'il me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    3.3
    3.5
    0.25
    0.5
    False
    resultat inconnu
    Jusqu'à nouvelle ordre 3.3 et inférieur à 3.75
    Lorsque je test le code en ligne de commande le resultat est bon !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> print valeur 
    3.5
    >>> print puissance
    3.3
    >>> print warning
    0.25
    >>> print critique
    0.5
    >>> puissance >= (valeur - warning)
    True
    >>> puissance <= (valeur + warning)
    True
    >>> puissance >= (valeur - warning) and puissance <= (valeur + warning) 
    True
    Je ne comprend pas pourquoi il me sort false dans le programme

    Si quelqu'un à une idée

    Merci

  2. #2
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Salut,
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print type(puissance)
    print valeur+warning

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Par défaut
    Bonjour pacificator et merci pour ton aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    3.3
    3.5
    0.25
    0.5
    False
    <type 'str'>
    3.75
    Il faut donc que je convertisse valeur en float

    Je vais googler ça et je reviens si je trouve, (ou pas )

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Par défaut
    Merci pacificator mon code marche

    Je poste le code si ça peut aider quelqu'un

    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
    #!/usr/bin/env python
    import getpass
    import sys
    import os
    import commands
    import string
     
    STATE_OK=0
    STATE_WARNING=1
    STATE_CRITICAL=2
    STATE_UNKNOWN=3
     
    #recuperation de l'ip de la sonde
    HOTE = sys.argv[1]
     
    OID = sys.argv[2]
     
    print OID
    valeur2 = sys.argv[3]
    warning2 = sys.argv[4]
    critical2 = sys.argv[5]
    #requete snmp sur l'OID de t a sonde
    commande = 'snmpget -v 1 -c public ' + HOTE +' '+ OID +' ' +'''| awk '{ print $4 } ' '''
    resultat= commands.getoutput(commande)
    #puissance = float(resultat)
    #cpt=resultat.find('string:')  # a remplacer au besoin suivant ce que renvoie la commande snmpget precedente
    valeur = float(eval(valeur2))
    warning = float(eval(warning2))
    critical = float(eval(critical2))
    puissance = float(eval(resultat))
    #puissance = float(resultat)
    #puissance = resultat
     
     
    if puissance >= (valeur - warning) and puissance <= (valeur + warning) :
       print "Normal"
       sys.exit(STATE_OK)
    if puissance >= (valeur -critical) and puissance <= (valeur - critical) :
       print "Danger"
       sys.exit(STATE_WARNING)
    if puissance < (valeur -critical) or puissance > (valeur - critical) :
       print "Critique"
       sys.exit(STATE_CRITICAL)
    #si rien trouver
    print "resultat inconnu"
    sys.exit(STATE_UNKNOWN)

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Je me permets de faire une remarque, utiliser eval est risqué si le code provient de l'extérieur (sys.argv, commande externe, etc). Ici, pourquoi ne pas te contenter de la fonction float qui fait ce dont tu as besoin ?

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

Discussions similaires

  1. Evalutation d'expression logique/booleenne
    Par eesteban dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 16/06/2004, 14h58
  2. incompréhension avec ado
    Par Orgied dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/05/2004, 18h24
  3. [WSAD5] probleme incompréhensible
    Par capitaine_banane dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 07/04/2004, 11h56
  4. Un lecteur logique caché!!!
    Par Cyberman dans le forum Composants
    Réponses: 3
    Dernier message: 05/10/2003, 23h16
  5. [JSP] Erreur incompréhensible
    Par xxaragornxx dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/09/2003, 16h37

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