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 :

optparse : choice et default


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut optparse : choice et default
    Bonjour,
    débutant en python je lutte avec optparse pour pouvoir attribuer un argument par défaut à une commande de type choice.

    Voilà l'idée : une option -a ayant comme arguments possibles x, y, z où x est l'argument par défaut si aucun argument n'est donné.

    Soit le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    parser.add_option("-a", type="choice", choices=["x", "y", "z"], default="x",
                 metavar="MODE", 
                 help="command a, possible mode are : x, y, z [default: %default]"
    Tout va bien, en cas d'argument valide ou invalide le résultat attendu me satisfait pleinement. Sauf que si -a n'a pas d'argument j'ai une erreur :
    error: -a option requires an argument

    À quoi sert default="x" dans ce cas à part définir %default ?
    J'ai beau retourner la doc dans tout les sens je ne vois pas d'issue simple à se problème sans coder une fonction spéciale et du même coup me passer de certaines fonctionnalités très satisfaisantes d'optparse...

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,
    Vous pensez:
    une option -a ayant comme arguments possibles x, y, z où x est l'argument par défaut si aucun argument n'est donné.
    Mais la documentation dit:

    All of the above examples involve setting some variable (the “destination”) when certain command-line options are seen. What happens if those options are never seen? Since we didn’t supply any defaults, they are all set to None.
    Le "default" ne vaut pas lorsque l'argument n'est pas entré mais lorsque l'option n'est pas entrée, il sert à positionner la valeur de celle-ci à une valeur autre que "None".
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Effectivement...

    Donc je suis obligé d'utiliser 2 options du genre -a et --mode ARG où la valeur par défaut de --mode s'appliquera à -a si --mode est absent.
    C'est ce que je fais en Bash et c'est justement une des raisons qui m'ont poussé à envisager de réécrire certains scripts en python...

    À tout hasard, et histoire d'être sûr, il n'y a pas moyen de faire cela simplement :
    une option -a ayant comme arguments possibles x, y, z où x est l'argument par défaut si aucun argument n'est donné.
    Merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Max__B Voir le message
    Effectivement...
    Donc je suis obligé d'utiliser 2 options du genre -a et --mode ARG où la valeur par défaut de --mode s'appliquera à -a si --mode est absent.
    ??? Désolé je n'ai pas comrpis.
    Ne pourriez vous dans ce cas déclarer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    parser.add_option("-a", "--mode", dest="a_dest", type="string",
                      choices=["x", "y", "z"], default="x",
                      help="...", metavar="ARG")
    ce qui permettra de taper les lignes de commandes:
    prog .... -a y ...., ou
    prog .... --mode=y ....
    Si la ligne de commande ne contient ni -a ni --mode, vous aurez "x" dans a_dest.

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

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    ??? Désolé je n'ai pas comrpis.
    Je vais prendre un autre exemple, 2 options :
    --delete : pas d'argument possible
    --delete-choice MODE : où MODE = simulation, interactive ou automatic [default = simulation]

    Si je lance le script avec la 1ère option :
    MonScript.py --delete
    Le mode utilisé est celui par défaut (simulation) soit la même chose que si j'avais lancé mon script comme ceci :
    MonScript.py --delete-choice simulation

    C'est le genre de chose que je fais parfois en bash et que j'aurai voulu éviter pour avoir les mêmes possibilités mais en utilisant une seule option avec ou sans argument.

    Ne pourriez vous dans ce cas déclarer: ...
    Le problème est le même que dans mon 1er message : l'obligation de donner un argument (sauf qu'ici type="string" n'est pas compatible avec choices=[] en python 2.5 en tout cas).

    Merci

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bon, j'ai trouvé ma réponse :

    Typically, a given option either takes an argument or it doesn’t. Lots of people want an “optional option arguments” feature, meaning that some options will take an argument if they see it, and won’t if they don’t. This is somewhat controversial, because it makes parsing ambiguous: if "-a" takes an optional argument and "-b" is another option entirely, how do we interpret "-ab"? Because of this ambiguity, optparse does not support this feature.
    http://docs.python.org/library/optpa...se#terminology

    Ça m'apprendra au moins à faire attention aux généralités avant les détails...

    Merci

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

Discussions similaires

  1. Selection par default d'une Choice
    Par ptitepo dans le forum Débuter
    Réponses: 3
    Dernier message: 03/02/2009, 10h39
  2. [SYBASE] sp_configure default sortorder id
    Par mous33 dans le forum Sybase
    Réponses: 1
    Dernier message: 04/05/2005, 17h26
  3. contraint default
    Par Radical_Edward dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/03/2005, 19h14
  4. Valeur par default dans un input file ?
    Par alainme dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 11/02/2005, 14h31
  5. [VB6] Détecter le navigateur par default
    Par GeDeon35 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/12/2004, 16h52

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