757 votes

Arguments de la ligne de commande en Python

660voto

ReadySquid Points 2295
import sys

print "\n".join(sys.argv)

sys.argv est une liste qui contient tous les arguments passés au script sur la ligne de commande.

580voto

Ayman Hourieh Points 39435

La bibliothèque standard comprend les modules suivants :

  • Le site getopt est similaire au module GNU getopt.
  • Le site optparse offre une analyse syntaxique des options de ligne de commande orientée objet.

Voici un exemple tiré de la documentation qui utilise cette dernière :

from optparse import OptionParser

parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
                  help="write report to FILE", metavar="FILE")
parser.add_option("-q", "--quiet",
                  action="store_false", dest="verbose", default=True,
                  help="don't print status messages to stdout")

(options, args) = parser.parse_args()

optparse supporte (entre autres) :

  • Plusieurs options dans n'importe quel ordre.
  • Options courtes et longues.
  • Valeurs par défaut.
  • Génération d'un message d'aide à l'utilisation.

S'il vous plaît Notez que optparse a été déprécié dans la version 2.7 de Python :

http://docs.python.org/2/library/optparse.html . argparse est le remplacement : http://docs.python.org/2/library/argparse.html#module-argparse

131voto

Silfheed Points 2818

Je vais juste évangéliser pour argparse ce qui est mieux pour ces des raisons essentiellement :

(copié du lien)

  • Le module argparse peut gérer les arguments positionnels et les arguments optionnels, tandis que optparse ne peut traiter que les optionnels

  • argparse n'est pas dogmatique sur ce à quoi votre interface de ligne de commande doit ressembler - des options comme -file ou /file sont supportées, tout comme les options obligatoires. Optparse refuse de supporter ces fonctionnalités, préférant la la pureté à l'aspect pratique

  • argparse produit des messages d'utilisation messages d'utilisation plus informatifs, y compris l'utilisation de la ligne de commande déterminée à partir vos arguments, et des messages d'aide pour les arguments positionnels et optionnels. facultatifs. Le module optparse vous demande d'écrire votre propre utilisation d'utilisation, et n'a aucun moyen d'afficher l'aide pour les arguments positionnels.

  • argparse supporte les actions qui consomment un nombre variable de de la ligne de commande, tandis que optparse exige que le nombre exact d'arguments d'arguments (par exemple 1, 2, ou 3) soit connu à l'avance

  • argparse supporte les analyseurs qui distribuent aux sous-commandes, tandis que optparse nécessite de définir allow_interspersed_args et faire le répartition de l'analyseur manuellement

Et mon préféré :

  • argparse permet aux paramètres de type et d'action de add_argument() pour être spécifié avec de simples callables, alors qu'optparse nécessite des attributs de classe de piratage comme STORE_ACTIONS ou CHECK_METHODS pour obtenir vérification correcte des arguments

76voto

J.F. Sebastian Points 102961

Il existe également argparse (une "amélioration" du module stdlib). optparse module). Exemple de l'introduction à argparse :

# script.py
import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument(
        'integers', metavar='int', type=int, choices=xrange(10),
         nargs='+', help='an integer in the range 0..9')
    parser.add_argument(
        '--sum', dest='accumulate', action='store_const', const=sum,
        default=max, help='sum the integers (default: find the max)')

    args = parser.parse_args()
    print args.accumulate(args.integers)

Utilisation :

$ script.py 1 2 3 4
4

$ script.py --sum 1 2 3 4
10

52voto

ralbatross Points 454

Le site docopt La bibliothèque est vraiment bien conçue. Elle construit un dictateur d'arguments à partir de la chaîne d'utilisation de votre application.

Par exemple, dans le fichier readme de docopt :

"""Naval Fate.

Usage:
  naval_fate.py ship new <name>...
  naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
  naval_fate.py ship shoot <x> <y>
  naval_fate.py mine (set|remove) <x> <y> [--moored | --drifting]
  naval_fate.py (-h | --help)
  naval_fate.py --version

Options:
  -h --help     Show this screen.
  --version     Show version.
  --speed=<kn>  Speed in knots [default: 10].
  --moored      Moored (anchored) mine.
  --drifting    Drifting mine.

"""
from docopt import docopt

if __name__ == '__main__':
    arguments = docopt(__doc__, version='Naval Fate 2.0')
    print(arguments)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X