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 :

[Python 2.4] Variabiliser un argument


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 18
    Par défaut [Python 2.4] Variabiliser un argument
    Bonjour,
    Dans le cadre d'une mise en production d'un script d'automatisation, je bute dès le début du script, sur un soucis de déclaration d'argument qui doit être récupéré dans le script.
    Voici le script et je m'explique:

    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
    99
    100
    # -*- coding: utf-8 -*-
    import os
    import sys
    import time
    import os.path
    import getopt
     
    # Constantes : nom et version du script
    __NOM_SCRIPT="verif_dossier.py"
    __VERSION_SCRIPT="1.0"
     
    # Definition des constantes systemes
    __SYSTEM = sys.platform
    __PYTHON_VERSION = sys.version
     
    # Definition des constantes code retour VTOM
    CR_WG = 1 # code retour warning
    CR_BL = 3 # code retour bloquant
    CR_OK = 0 # code retour bonne execution
     
    # Definitions des variables globales :
    vg_Debug = False
    vg_Param_d = ""
    vg_Timeout = 5
     
    # Version du CC a completer
    __VERSION = __NOM_SCRIPT + "  v" + __VERSION_SCRIPT + " - python "+__PYTHON_VERSION+" - "+__SYSTEM
     
     
    #*****************************************************************************************************************************#
    #                                         Définitions des fonctions et procédures                                             #
    #*****************************************************************************************************************************#
     
    def p_Debug(chaine):
        # affiche la chaine lorsque l'option debug est positionnée a True
        if vg_Debug : print str(chaine)
     
    def p_Test_Options_Script(arguments):
        # tests les arguments passes en parametres au script
        p_Debug("Tests des arguments du script")
     
        if arguments == [] :
            print "*** un argument est manquant ***"
            p_Print_Usage(CR_BL)
     
     
        p_Test_Option_Dossier()
     
     
    def p_Test_Option_Dossier():
        global vg_Param_d
        #le champ -d doit être renseigné obligatoirement
        if vg_Param_d == "" :
            print "*** Il n'y a pas de nom de dossier d'indiqué ***"
            p_Print_Usage(CR_BL)
     
    def p_Param_Lg_Commande(params):
        # Gestion des arguments passes en parametre de la ligne de commandes
        global vg_Param_d
        global vg_Debug
        global vg_Timeout
     
     
        try:
     
            opts, args = getopt.getopt(params, "d", ["dossier="])
     
        except getopt.GetoptError, err:
            # print help information and exit:
            print str(err) # will print something like "option -d not recognized"
            p_Print_Usage(CR_BL)
     
        for o, d in opts:
            if o == ("--help"):
                p_Print_Usage(CR_BL)
            elif o in ("--dossier" ,"-d"):
                vg_Param_d = vg_Param_d + ' ' + a
            else :
                assert False, "Option invalide"
     
     
        # affiche un message d erreur en cas de params incorrects
        p_Test_Options_Script(params)
     
    def p_Verif_Creation_Dossier():
        global vg_Param_d
     
     
    #*******************************************************************************************************************************#
    #                                                        Main                                                                   #
    #*******************************************************************************************************************************#
     
    if __name__ == "__main__":
        # Variable du programme principal
     
        # Affiche la version
        print __VERSION + "\n"
     
        p_Param_Lg_Commande(sys.argv[1:])
        print ('Hello' + vg_Param_d)
    Le but de mon script, à terme, est de l'utiliser dans un environnement VTOM, qui est un ordonnanceur.
    Le script, aura un argument rentré en dur, par exemple : python NOM_DE_MON_SCRIPT.py -d DOSSIER_LG_PROD
    Je voudrais que le script, au passage de l'argument, check si le dossier existe, et dans le cas contraire, le créé avec une nomenclature précise, celle indiquée dans l'argument passée au script.

    Il faut donc que je puisse interpréter l'argument dans le script si le dossier demandé n'existe pas, créer ce dossier avec une arborescence précise, et timestamper certains fichiers et dossiers par la suite, mais le soucis actuel est vraiment de pouvoir interpréter en variable l'argument mis dans la ligne de commande, pour que le script automatise le processus de création de l'arborescence en fonction de l'argument rentré.

    Je ne sais pas si c'est bien clair mais si quelqu'un a une idée et surtout si c'est faisable.
    Merci pour votre précieuse aide.

    PS: Il est en cours de construction, il ne faut pas faire attention si des fonctions ne sont pas complètes

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Bonjour Orichas,

    Je pense que tu devrais regarder du côté d'argparse
    C'est une lib qui vient en remplacement de getopts, elle te permet de définir les différents arguments attendus (ainsi que leur type). Il te reste ensuite à traiter les arguments...

    Une info au passage, il te faudrait autant que faire se peut, éviter les variables globales

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 18
    Par défaut
    Bonjour Fifan,

    J'y ai effectivement pensé mais le module argparse n'est utilisable visiblement qu'à partir de la version 2.7
    Les scripts actuels étant assez anciens, je dois m'adapter pour l'instant aux anciennes versions présentes, quitte à revoir les scripts sur des versions plus récentes plus tard.

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Avant argparse, il y avait optparse qui existait dėjà dans python 2.4.

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 18
    Par défaut
    C'est effectivement ce module que j'essaie maintenant d'utiliser.
    Quand j'appelle mon script, admettons que je rentre le nom de dossier:

    python script.py -d NOM_DE_MON_DOSSIER

    Est-ce qu'il est possible dans le script, de variabiliser automatiquement NOM_DE_MON_DOSSIER, par exemple avec %d, afin que mon script travaille automatique autour de cette variable qui elle se réfère directement à l'argument rentré dans la ligne de commande?

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

    Citation Envoyé par Orichas Voir le message
    Est-ce qu'il est possible dans le script, de variabiliser automatiquement NOM_DE_MON_DOSSIER, par exemple avec %d, afin que mon script travaille automatique autour de cette variable qui elle se réfère directement à l'argument rentré dans la ligne de commande?
    "variabiliser" voilà un terme bizarre pour traduire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable = sys.argv[-1]
    qui associe "variable" à la dernière chaîne de caractères de la liste sys.argv (qui est NOM_DE_MON_DOSSIER).

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

  7. #7
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 18
    Par défaut
    Le terme est bizarre, je le conçois ^^

    Donc là, nous avons un code qui permet de mettre un nom de variable, et de l'associer à la dernière chaine de caractères de la liste sys.argv
    Donc si j'ai bien compris, si ça fonctionne comme une liste, je dois pouvoir lui indiquer la position des arguments si j'en ai plusieurs du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable_Dossier = sys.argv[-1] #En admettant que je mette toujours le nom de dossier en dernière position
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable_Version = sys.argv[1:] #En admettant que je rentre la version du dossier en 2e position

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 670
    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 670
    Par défaut
    Citation Envoyé par Orichas Voir le message
    Donc si j'ai bien compris, si ça fonctionne comme une liste, je dois pouvoir lui indiquer la position des arguments si j'en ai plusieurs du style:
    Voilà...
    Et soit vous récupérez directement vos chaînes de caractères dans sys.argv et vous vous retrouverez à ré-écrire tout ou partie des bibliothèques getopt/optparse (dispo depuis 2.3) soit vous apprenez à utiliser ces bibliothèques là.

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

Discussions similaires

  1. Transformer structure (argument de fonction) de C++ vers Python avec swig
    Par developers dans le forum Interfaçage autre langage
    Réponses: 0
    Dernier message: 20/07/2010, 11h44
  2. passer un argument à un exe python qui tourne
    Par tchernobill dans le forum Général Python
    Réponses: 10
    Dernier message: 14/03/2009, 17h53
  3. Réponses: 0
    Dernier message: 11/11/2007, 21h31
  4. [Mod Python] passage d'arguments II
    Par Gorgo13 dans le forum Réseau/Web
    Réponses: 14
    Dernier message: 23/10/2007, 14h08
  5. [Mod Python] passage d'arguments
    Par Gorgo13 dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 20/10/2007, 16h47

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