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 :

Utilisation librairie argparse [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2020
    Messages : 17
    Par défaut Utilisation librairie argparse
    Bonjour,
    J'aimerais utiliser la librairie argparse pour exécuter des programmes python en mettant directement mes arguments en ligne de commande linux.
    Pour ça j'ai écrit ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import argparse
     
    def monprogramme (f1,f2,f3):
        ...
    monprogramme(f1 f2,f3)
     
    if __name__ == "__main__":
        parser = argparse.ArgumentParser(prog = "Mon Programme", description = "un super programme très utile")
        parser.add_argument("-i", "--input", help = "sos")
     
        args = parser.parse _args()
        print(args.input)
    (où f1, f2 et f3 sont des fichiers)

    Je lance mon programme en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python3 monprogramme.py f1, f2, f3
    et j'obtiens l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
        File "monprogramme.py", line 102, in <module>
            monprogramme(f1, f2, f3)
    NameError : name 'f1' is not defined
    (Et si j'écris le programme à la suite du if __name __ == "__main__" j'ai comme retour que les arguments ne sont pas reconnus)


    Je pense que j'utilise mal la librairie argparse, mais même en ayant lu le doc python je ne comprends pas quelle pourrait être mon erreur

    Quelqu'un a une idée ?
    Merci d'avance !

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

    Pour pouvoir exécuter l'instruction monprogramme(f1, f2, f3), il faut que toutes les variables aient été définies.

    Ce qui avec Python passe par des instructions de la forme f1 = ..., f2 = ... puisque qu'avec Python une variable se définit en lui assignant un objet.

    Et si c'est juste pour récupérer 3 noms de fichiers, peut être que vous pourriez utiliser sys.argv.

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

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2020
    Messages : 17
    Par défaut
    Bonjour,

    D'accord je vais regarder de ce coté alors

    Merci beaucoup !

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Si vous voulez utiliser argparse, faites vous la main d'abord sur des exemples simples.
    Un bon tuto :

    https://docs.python.org/fr/3/howto/a...onal-arguments

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2020
    Messages : 17
    Par défaut
    D'accord, merci !

  6. #6
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 513
    Par défaut
    Bonjour,

    En fait, avant de comprendre argparse, il faut d'abord comprendre quelque chose de beaucoup plus fondamental : quelles lignes l'interpréteur Python exécute et dans quel ordre.

    Par exemple, admettons qu'on ait deux fichiers :

    Qu'affiche le programme si on exécute "toto.py" ? et "titi.py" ?
    Réponse (exemple chez moi, sur Windows) :
    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
    C:\test>python --version
    Python 3.8.1
     
    C:\test>python toto.py
    1
    2
    3 (in foo)
    4
    5
    6 (in foo)
    7
     
    C:\test>python titi.py
    0
    1
    2
    3 (in foo)
    4
    8
    9
    10 (in bar)
    11
    12
    13 (in bar)
    14
    L'interpréteur exécute le code en le parcourant de haut en bas.
    Plus précisément, quand le code rencontre une définition de fonction (comme def foo(x):), il ne l'exécute pas directement : il ne fait qu'associer le nom de la fonction (comme foo) au code correspondant. Par contre, s'il rencontre un appel de fonction (comme foo("3")), là, il va l'exécuter.
    Par contre, ce qui se trouve dans un if __name__ == "__main__": n'est pas exécuté en cas d'import.

    Dans ton code avec l'erreur, l'interpréteur te signale une erreur avant même qu'il n'ait pu atteindre le code sous ton if __name__ == "__main__": qui manipule argparse : c'est à la ligne monprogramme(f1 f2,f3) qu'il se demande "mais qui est f1" ?

    Je pense que le plus simple est de consolider les bases avec un tutoriel. Cela permet de progresser plus vite par la suite.

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

Discussions similaires

  1. Interface SD-ATMEGA / Utilisation librairie EFSL
    Par ChipieChoupette dans le forum Automation
    Réponses: 1
    Dernier message: 08/12/2008, 13h16
  2. Problème utilisation librairie gsoap
    Par Samildanach dans le forum XML
    Réponses: 0
    Dernier message: 20/07/2008, 13h04
  3. Utiliser librairie C# dans Excel
    Par Jarro dans le forum C#
    Réponses: 9
    Dernier message: 05/02/2008, 16h53
  4. Utiliser librairie externe dans son plugin
    Par ghillairet dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 09/01/2008, 10h56
  5. utilisation librairie libmd5
    Par bit_o dans le forum C
    Réponses: 3
    Dernier message: 14/04/2007, 12h00

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