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 :

argument pour ligne de commande


Sujet :

Python

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut argument pour ligne de commande
    Bonjour,

    j'ai une fonction processData qui fait un double traitement

    je voudrais faire le choix du traitement en ligne de commande:
    processData
    Arguments: [-c -d] input_file

    de telle sorte que processData -c input_file (c=copy), et processData -d input_file(d=delete)

    merci

  2. #2
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Points : 318
    Points
    318
    Par défaut
    Utilise le module getopt.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    si tu pouvais me filer plus de détails, ça m'arrangerait..

    j'ai effectivement vu le module getOpt, ainsi que Optparse, mais je n'ai pas pu l'adapter correctement

    merci

  4. #4
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Points : 318
    Points
    318
    Par défaut
    http://docs.python.org/lib/module-getopt.html tu as des exemples d'utilisations à la fin. Il suffit de les adapter à ton cas.

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    j'ai essayé ça mais je dois avoir pas pigé un truc..
    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
     
    def main():
        try:
            opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
        except getopt.GetoptError, err:
            print str(err) 
            usage()
            sys.exit(2)
        output = None
        for o, a in opts:
            if o == "-c":
                print 'ccccccc'
            elif o in ("-h", "--help"):
                usage()
                sys.exit()
            elif o in ("-u", "--output"):
                print 'uuuuuuuuuuuuuu'
            else:
                assert False, "unhandled option"
     
    if __name__ == "__main__":
        main() -c
    je veux juste essayer de voir le traitement se produire pour une option ou une autre.. mais comment effectuer l'appel aprés?sic'est vraiment le bon code..
    merci

  6. #6
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Points : 318
    Points
    318
    Par défaut
    et si tu faisais plutôt
    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
     
    import getopt, sys
     
    def main():
        try:
            opts, args = getopt.getopt(sys.argv[1:], "cu", ["copy", "delete"])
        except getopt.GetoptError, err:
            print str(err) 
            usage()
            sys.exit(2)
        output = None
        for o, a in opts:
            if o  in ["-c","--copy"]:
                print 'ccccccc'
            elif o in ("-u", "--delete"):
                print 'uuuuuuuuuuuuuu'
            else:
                assert False, "unhandled option"
     
    if __name__ == "__main__":
        main()
    Puis tu appelles ton script comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    chaouche@mbarek:~/TEST/PYTHON$ python getOpt.py --delete
    uuuuuuuuuuuuuu
    chaouche@mbarek:~/TEST/PYTHON$ 
    chaouche@mbarek:~/TEST/PYTHON$ python getOpt.py -u
    uuuuuuuuuuuuuu
    chaouche@mbarek:~/TEST/PYTHON$ python getOpt.py -c
    ccccccc
    chaouche@mbarek:~/TEST/PYTHON$ python getOpt.py --copy
    ccccccc
    chaouche@mbarek:~/TEST/PYTHON$ python getOpt.py --delete
    uuuuuuuuuuuuuu
    chaouche@mbarek:~/TEST/PYTHON$

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    ok je comprends mieux

    maintenant, si je veux ajouter un argument obligatoire, comme le nom d'un fichier par exemple?

    merci

  8. #8
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Points : 318
    Points
    318
    Par défaut
    A ce moment là tu utilises optparse et tu fais quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    from optparse import OptionParser
    parser = OptionParser()
    parser.add_option("-f", "--file", dest="filename")
    (options, args) = parser.parse_args()
    if not options.filename :
        usage()
    Où usage affiche l'aide qui dit que le nom du fichier est obligatoire.

  9. #9
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    ce ne serait pas maladroit s utiliser getopts et optparse?

    est ce que je peux utiliser optParse tout seul?
    merci

  10. #10
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Points : 318
    Points
    318
    Par défaut
    Oui.

  11. #11
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    parser.add_option("-f", "--file", dest="filename")
    nécessite un argument aprés le -f ..

    mais comment ajouter une option sans argument après (comme le -c que j'ai fait avec getOpt ci dessus) ?

  12. #12
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Points : 318
    Points
    318
    Par défaut
    Tu fais pareil que pour -f, sauf qu'au lieu d'avoir une valeur dans dest, tu auras un booléen qui t'informera si l'option a été utilisée ou pas.

  13. #13
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    est ce que tu peux etre clair stp ?
    j'ai l'impression que tu fais tout pour me pousser à chercher, mais méme la doc en ligne ne fournit pas d'aide sur ça.

    C'est juste une ligne de code que je te demande.

    Je ne comprends pas ce que tu veux dire par boolean à la place de dest.. j'ai essayé plusieurs combinaisons en vain ...

  14. #14
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Points : 318
    Points
    318
    Par défaut
    Faux, la documentation est claire :
    http://docs.python.org/lib/module-optparse.html

    When parse_args() returns from parsing this command line, options.filename will be "outfile" and options.verbose will be False.
    Mais admettons... voilà le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    parser.add_option("-c", "--copy", dest="copie")
    ...
    (options, args) = parser.parse_args()
     
    copier = options.copie # Contiendra True ou False selon que tu appelles ton script avec -c ou pas
    Content ptit veinard ?

  15. #15
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    pas vraiment..
    la preuve que toi aussi tu te trompes

    Le code que tu as fourni, et que j'ai essayé un millons de fois, retourne l'erreur suivante :
    processData.py: error: -c option requires an argument

    et c'est exactement ce que je me tue à t'expliquer depuis tout à l'heure.

    je veux appeler mon script comme tel:
    python processData.py -c -f 'C:/temp/my_file.txt'
    ou bien
    python processData.py -u -f 'C:/temp/my_file.txt'

    c et u sans arguments, et f avec un argument ..

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Points : 139
    Points
    139
    Par défaut
    c'est parce qu'il faut ajouter l'action et les valeurs par défaut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    parser.add_option("-f", "--file",
                      action="store", type="string", dest="filename")
     
    parser.add_option("-u", action="store_true", dest="toto",default=False)
    parser.add_option("-c", action="store_false", dest="titi",default=True)
    store_true et false sont les actions pour les flags booleens.

  17. #17
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    bon je me suis débrouillé juste avec sys.argv

    J'ai pas pu comprendre l'utilisation de OptParse..

    merci quand meme Fructidor pour ta réponse,

    et puis Yacine, si tu regardais mon historique, tu verras que je m'attaque à plusieurs langages que j'ai appris par moi même, avec l'aide de ce forum, et ce n'est pas toi qui viendra m'apprendre comment chercher ..
    tu ferais mieux d'arréter de croire que tu as la science infuse et tes réponses intelligentes du genre Oui ou Non. C'est pas ce que l'on veut sur ce site.
    J'avais juste demandé des explications - et oui aprés avoir longtems cherché dans la doc. La preuve, tu n'as méme pas admis que tu t'es complétement gourré dans l'utilisation de OptParse.

    Merci pour tout

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/11/2012, 08h50
  2. Réponses: 27
    Dernier message: 14/12/2006, 19h49
  3. [VB.NET]Argument en ligne de commande
    Par Fayoul dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2006, 12h27
  4. taille max des arguments en ligne de commande
    Par clepape dans le forum Langage
    Réponses: 2
    Dernier message: 08/10/2005, 13h18
  5. Réponses: 3
    Dernier message: 07/04/2003, 20h06

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