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, passer plusieurs fichiers en arguments d'une même option


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut Optparse, passer plusieurs fichiers en arguments d'une même option
    Bonjour à tous,

    je lis depuis aujourd'hui la doc concernant le module optparse (http://docs.python.org/library/optpa...enerating-help), et je dois reconnaitre que je n'arrive pas à suivre, je reprends les exemples de la doc, mais dès que je m'éloigne des exemples ça ne va plus

    J'aurai voulu savoir si quelqu'un connaissant ce module pourrait m'orienter vers ce que j'essaye de réaliser. J'ai réalisé un script qui traite des fichiers que l'utilisateur entre, cependant j'aimerai maintenant qu'il puisse les entrer en ligne de commande après avoir spécifié une option. Concrètement je cherche à obtenir quelque chose comme ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    script.py -i file1 file2 file3...  -x file4 file5 file6...
    En fait j'aimerai que l'utilisateur puisse donner en entrée plusieurs fichiers d'inputs dans chacune des 2 options.

    Comment puis-je spécifiquer que je veux récupérer entre 1 et 5 fichiers en entrée par option par exemple ?

    Merci à vous

  2. #2
    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,

    Le module optparse est "Deprecated": il faut utiliser maintenant argparse, qui n'est d'ailleurs pas forcément plus simple...

    Pour résoudre ton problème, regarde du côté de l'option "nargs" qui a l'air de faire ce que tu cherches..

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut
    Bonjour tyrtamos,

    Le module optparse est "Deprecated": il faut utiliser maintenant argparse, qui n'est d'ailleurs pas forcément plus simple...
    Décidemment je n'suis pas à la page

    Je vais étudier argparse alors, et puis vu ce que j'ai retenu d'optparse ça sera sans grands regrets

    Merci

  4. #4
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut
    Sinon tu peux utiliser les virgules
    et ensuite un split

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut
    Malheureusement c'est un module récent et incompatible avec la version de python installée au Bureau (2.6.5)

    Je retourne donc sur optparse

    Sinon tu peux utiliser les virgules
    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    [...] -i foo,bar,toto

    et ensuite un split
    Merci pour votre réponse, cependant je n'arrive pas encore à générer un tel rendu en utilisant optparse, ou peu être que j'ai mal compris

  6. #6
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut
    Au final c'est quoi ton but ?
    Si c'est simplement récupérer des arguments getopt peut suffire.

    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
    import getopt,sys
     
     
    try:
    	opts, args = getopt.getopt(sys.argv[1:], "pvd:", ["help", "output=","date="])
    except getopt.GetoptError, err:
    	# print help information and exit:
    	print str(err) # will print something like "option -a not recognized"
    	sys.exit(2)
     
    for o, a in opts:
    	if connexion == False:
    		if o == "-p":
    			print "prod"
    		if o == "-v":
    			print "val"
    	if o in ("-d","--date"):
    		current_dates = a.split(",")

  7. #7
    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
    Citation Envoyé par michel42 Voir le message
    Je retourne donc sur optparse
    Regarde tout de même l'option nargs qui a l'air d'exister aussi sous optparse et de faire la même chose.

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Regarde tout de même l'option nargs qui a l'air d'exister aussi sous optparse et de faire la même chose.
    Ok merci je regarde ça


    Au final c'est quoi ton but ?
    J'ai crée un script qui traite des fichiers qu'on lui donne en input, j'aimerai que l'utilisateur puisse les donner directement en ligne de commande, plutot que de passer par un raw_input() etc...

    Je travail sur deux types de fichiers différents, j'aimerai donc que l'utilisateur tape une option suivie des fichiers de types 1, puis la seconde otpion suvie des fichiers de type 2. Après ca je travail sur mes fichiers comme je le faisais auparavent.

    J'aimerai quelque chose proche de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_script -i fichier1 fichier2 fichier3... -x fichier4 fichier5 fichier6...
    Apparemment je ne suis pas au point je vais lire la doc en détail ce soir, merci pour vos conseils.

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

    Citation Envoyé par michel42 Voir le message
    Malheureusement c'est un module récent et incompatible avec la version de python installée au Bureau (2.6.5)
    Juste pour info, vous pouvez installer argparse sur 2.6 et d'autres versions de Python depuis PyPi

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

  10. #10
    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
    Voilà un petit exemple avec argparse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import argparse
     
    #############################################################################
    if __name__ == "__main__":
     
        parser = argparse.ArgumentParser(description="test")
     
        parser.add_argument('-i', nargs='*')
     
        parser.add_argument('-x', nargs='*')
     
        dargs = vars(parser.parse_args())
     
        print dargs
    Avec l'appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test.py -i fichier1 fichier2 fichier3 -x fichier4 fichier5 fichier6
    ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {'i': ['fichier1', 'fichier2', 'fichier3'], 'x': ['fichier4', 'fichier5', 'fichier6']
    On peut, bien entendu, mettre un ou plusieurs fichiers derrière 'i' ou 'x'.

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

Discussions similaires

  1. passer un tableau en argument dans une fonction
    Par rogerio dans le forum Débuter
    Réponses: 6
    Dernier message: 30/10/2008, 12h15
  2. ouvrir plusieurs fichiers et appliquer à chacun une meme macro
    Par sebhm dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/06/2008, 11h16
  3. [Débutant] Comment passer un fichier en paramètre d'une fonction?
    Par Rires et Chansons dans le forum MATLAB
    Réponses: 4
    Dernier message: 23/10/2007, 21h12
  4. Passer un objet en argument d'une servlet
    Par julien1311 dans le forum Servlets/JSP
    Réponses: 16
    Dernier message: 06/08/2007, 16h30
  5. Réponses: 2
    Dernier message: 27/04/2007, 13h45

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