2010-07-13 5 views
12

Possible en double:
What's the best way to grab/parse command line arguments passed to a Python script?Comment analyser les arguments de la ligne de commande en Python?

Je voudrais être en mesure d'analyser les arguments de ligne de commande dans mon programme Python 2.6.

Idéalement, je veux être en mesure de traiter ces cas:

# Show some help 
./myprogram --help 

# These are equivalent 
./myprogram --block=1 
./myprogram -b 1 

# This means verbose, and twice as verbose: 
./myprogram -v 
./myprogram -vv 

Répondre

32

Consultez le module argparse (ou optparse pour les anciennes versions de Python).
Notez que argparse/optparse sont plus récents, meilleurs remplacements pour getopt, donc si vous êtes nouveau à ce qu'ils sont l'option recommandée. Des getopt docs:

Remarque Le module getopt est un analyseur pour les options de ligne de commande dont l'API est conçue pour être familière aux utilisateurs de la fonction C getopt(). Les utilisateurs qui ne connaissent pas la fonction C getopt() ou qui aimeraient écrire moins de code et obtenir de meilleurs messages d'aide et d'erreur devraient envisager d'utiliser le module argparse à la place.

+1

Et par « les anciennes versions de Python », il signifie que chaque version qui a été libéré plus de 8 jours depuis. –

+6

@Forest - chut, nous sommes dans le futur maintenant! ;) – tzaman

+3

Et au fil du temps, cette réponse devient de plus en plus correcte. – jcdyer

3

Python a un traitement argument intégré, avec le module getopt.

Il peut gérer des formes longues et courtes d'arguments ainsi que des versions "nues" et paramétrées (--help par rapport à --num=7).

Pour votre cas d'utilisation spécifiques (avec un peu plus), vous seriez probablement regarder quelque chose comme:

opts,args = getopt.getopt(argv,"b:vVh",["block=", "verbose", "very-verbose", "help"]) 

Je ne suis pas sûr du haut de ma tête si elle permet à plusieurs caractères variantes de simple-tiret comme -vv. Je voudrais juste utiliser -v et -V moi-même pour rendre ma vie plus facile.

1

une meilleure option que ce lien est les modules optparse ou GetOpt, et selon la version de Python que vous utilisez, le plus récent ones..2.7 et 3.1.2, ont un module encore plus récent construit en La documentation sur la référence officielle de python.org contient un ensemble très instructif de documentation et d'exemples pour ces modules. Si vous allez sur python.org et que vous faites une recherche rapide pour OptParse ou GetOpt, vous aurez tout ce dont vous avez besoin.

1

optfunc est un petit module intéressant. C'est génial si vous voulez écrire rapidement un petit script. Pour les choses plus importantes, je voudrais aller avec argparse comme d'autres l'ont écrit.

-4

Il pourrait y avoir une meilleure façon mais je voudrais juste sys.argv utilise et mettre en conditionals chaque fois que nécessaire à savoir

if '--v' or '--vv' in sys.argv : 
    print 'verbose message' 
Questions connexes