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 :

Argparse et espace


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Octobre 2016
    Messages : 15
    Par défaut Argparse et espace
    Bonjour,

    Je cherche a utiliser dans un paramètre passé à un script un répertoire
    j'utilise argparse


    ex python monscript.py -o c:\temp\.

    extrait du script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parser.add_argument('-o','--output',metavar='',help='répertoire de sortie des extractions")
    c'est tout à fait fonctionnel mais quand je mets un espace dans l'argument il n'est plus interprété correctement

    ex python monscript.py -o c:\temp\mon repertoire\.

    merci de votre aide

  2. #2
    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 Mickou35 Voir le message
    c'est tout a fait fonctionnel mais quand je mets un expace dans l'argument il n'est plus interprété correctement
    Lorsque vous passez des arguments à une commande (qui éventuellement déroule un script écrit en Python), c'est le "lanceur" de programmes côté système qui va trouver le point d'entrée (la où le programme démarre) et l'appeler avec:
    - argc: le nombre d'arguments,
    - argv: les arguments sous la forme d'un tableau de chaines de caractères
    que le programmeur Python (et argparse) récupère via sys.argv.

    Donc la question se ramène à savoir "comment dire au "lanceur" de ne pas découper la chaîne de caractères qui contient des "espaces?"... La solution sera, en général, de l'envelopper avec des double-quotes (")... comme vous devriez le faire pour n'importe quelle autre commande.

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

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Octobre 2016
    Messages : 15
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Lorsque vous passez des arguments à une commande (qui éventuellement déroule un script écrit en Python), c'est le "lanceur" de programmes côté système qui va trouver le point d'entrée (la où le programme démarre) et l'appeler avec:
    - argc: le nombre d'arguments,
    - argv: les arguments sous la forme d'un tableau de chaines de caractères
    que le programmeur Python (et argparse) récupère via sys.argv.

    Donc la question se ramène à savoir "comment dire au "lanceur" de ne pas découper la chaîne de caractères qui contient des "espaces?"... La solution sera, en général, de l'envelopper avec des double-quotes (")... comme vous devriez le faire pour n'importe quelle autre commande.

    - W
    Merci de ta réponse
    c'est bien ce que voulais faire dans un premier temps
    mais je bloque surement sur un truc simple

    script épuré

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import argparse
     
    parser=argparse.ArgumentParser(description='Test parseur')
    parser.add_argument('-o','--output',help='répertoire de sortie')
    parser.add_argument('-i','--input',help='répertoire entrée')
     
    args=parser.parse_args()
     
    for arg in args._get_kwargs():
        print (arg)
    test 1 : OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    C:\PycharmProjects\test>python argument_29012019.py -o c:\temp\ -i c:\temp\
    ('input', 'c:\\temp\\')
    ('output', 'c:\\temp\\')
    test 2 : KO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    C:\PycharmProjects\test>python argument_29012019.py -o "c:\temp\temp 2\" -i c:\temp\
    ('input', None)
    ('output', 'c:\\temp\\temp 2" -i c:\\temp\\')
    Merci de votre aide

  4. #4
    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
    Citation Envoyé par Mickou35 Voir le message
    mais je bloque surement sur un truc simple

    script épuré
    Un script épuré serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import sys
    print (sys.argv)
    Regardez un peu comment sont affichés les '\'...
    Si vous ne trouvez pas, vous avez toujours la possibilité de revoir le chapitre sur les chaines de caractères dans votre tuto. favori.

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

  5. #5
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Octobre 2016
    Messages : 15
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Un script épuré serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import sys
    print (sys.argv)
    Regardez un peu comment sont affichés les '\'...
    Si vous ne trouvez pas, vous avez toujours la possibilité de revoir le chapitre sur les chaines de caractères dans votre tuto. favori.

    - W
    Merci beaucoup.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Réponses: 2
    Dernier message: 26/02/2003, 15h18
  3. Réponses: 2
    Dernier message: 06/12/2002, 07h50
  4. Accéder à un espace mémoire sous XP
    Par keny dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 02/08/2002, 12h37

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