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 :

premier pas - controle d'argument


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut premier pas - controle d'argument
    salut
    je fais mes premier avec python et je bloque sur le controle d'argument( un truc super partique)

    voici 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
    import os
     
    def argument_string(fonction):
        def capsule(arg):
            if not isinstance(arg,str):
                raise TypeError("'%s' doit etre une chaine" % str(arg))
            return function(arg)
        return capsule
     
    class SearchProccess(object):
         def __init__(self):
             self.expression = None
             self.procces = None
     
         @argument_string
         def setExpression(self, expression):
             self.expression = expression
     
         @argument_string
         def setProcces(self, procces):
             self.procces = procces
     
         def search(self):
             return os.popen( self.expression+self.procces)
     
    apache = SearchProccess()
    apache.setExpression('ps aux|grep ')
    apache.setProcces('httpd')
    for line in apache.search():
        print line
    j'ai une erreur de syntaxe au premier @

    d'autre petites questions

    1 - mon petit bout de code doit me sortir les process http actif, mais il sort juste la ligne correspondant a 'grep http'
    avec le shell j'ai bien les tous procces http

    2 - le resultat de la mehode search renvoi dans un tableau les lignes de 'ps aux'
    comment et dans quelle structuer placer les resulats
    split ou regex?
    array, dictionnaire???

    merci de votre aide

  2. #2
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    quelle version de Python utilises-tu ?
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 89
    Par défaut 2 petites erreurs :-)
    salut,

    Avec le message d'erreur ça serait mieux !

    sinon en lisant ton code :
    erreur d'ortographe dans ton return "function" est différent de "fonction"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def argument_string(fonction):
        def capsule(arg):
            if not isinstance(arg,str):
                raise TypeError("'%s' doit etre une chaine" % str(arg))
            return function(arg)
        return capsule
    de plus ton décorateur est défini en dehors de ta classe, je ne suis pas sur qu'il apprécie le fait de contrôler "self" pointeur vers l'instance pour savoir si c'est une string :-)

    et puis dans l'idée decorateur contrôle d'argument ben vaut mieux passer le type en paramètre. voici ta classe avec un décorateur de contôle de type que j'ai péché je ne sais plus où !
    Sorry pour les véritables auteurs.

    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
     
    import os
     
    exp='ps aux|grep '
    proc='httpd'
     
    class SearchProccess(object):
        def __init__(self):
            self.expression = None
            self.procces = None        
     
        def require(self,*types):
            """Return a decorator function that requires specified types.
            types -- tuple each element of which is a type or class or a tuple of
                    several types or classes.
            Example to require a string then a numeric argument
            @require(str, (int, long, float))
            will do the trick"""
     
            def deco(func):
                """Decorator function to be returned from require().  Returns a function
                   wrapper that validates argument types."""
                def wrapper (*args):
                    """Function wrapper that checks argument types."""
                    for a, t in zip(args, types):
                        if type(t) == type(()):
                            # any of these types are ok
                            msg = """%s is not a valid type. Valid types:\n%s"""
                            assert sum(isinstance(a, tp) for tp in t) > 0, msg % (a, '\n'.join(str(x) for x in t))
                        assert isinstance(a, t), '%s is not a %s type' % (a, t)
                    return func(*args)
                return wrapper
            return deco
     
        @require(str)
        def setExpression(self, expression):
            self.expression = expression
     
        @require(str)
        def setProcces(self, procces):
            self.procces = procces
     
        def search(self):
            return os.popen( self.expression+self.procces)
     
     
    apache = SearchProccess()
    apache.setExpression(exp)
    apache.setProcces(proc)
    for line in apache.search():
        print line
    pour le reste je laisse soin aux autres de te répondre, et en plus ça dépendra aussi de ce que tu veux faire
    @++

    bienvenue dans Python :-)

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    salut
    merci de ces reponses

    de plus ton décorateur est défini en dehors de ta classe, je ne suis pas sur qu'il apprécie le fait de contrôler "self" pointeur vers l'instance pour savoir si c'est une string :-)
    dans ma premiere implementation je ne controle pas l'argument de ma methode, mais l'instance de classe???


    puis dans l'idée decorateur contrôle d'argument ben vaut mieux passer le type en paramètre
    cent pour cent d'accord

    peut declare un objet declarateur dans le contexte global et faire appel a ces methode de la façcon suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    deco = Deco();
    class SearchProccess(object):
         def __init__(self):
             self.expression = None
             self.procces = None
     
         @deco.argument_string
         def setExpression(self, expression):
             self.expression = expression
    je dois dire bien des betise autant appeler une methode statique

    ma version de python est la 2.3

  5. #5
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Citation Envoyé par jeff_!
    ma version de python est la 2.3
    Alors ne cherche pas plus loin : les décorateurs ne sont disponibles que depuis la version 2.4 de Python.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    ok merci, vais l'installer

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/11/2005, 12h27
  2. Premier pas sous C++
    Par Lachdanan dans le forum C++
    Réponses: 8
    Dernier message: 11/10/2005, 14h39
  3. premier pas dans la vie active
    Par godik dans le forum Emploi
    Réponses: 12
    Dernier message: 10/10/2005, 16h27
  4. [debutant] premier pas avec le SDK directX9
    Par arno2004 dans le forum DirectX
    Réponses: 6
    Dernier message: 27/05/2004, 21h03
  5. Réponses: 2
    Dernier message: 14/04/2004, 19h37

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