674 votes

Arguments de la ligne de commande en Python

Je suis à l'origine un programmeur C. J'ai vu de nombreuses astuces et "hacks" pour lire de nombreux arguments différents.

Quels sont les moyens dont disposent les programmeurs Python pour y parvenir ?

Related

601voto

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.

504voto

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

71voto

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

50voto

JPCosta Points 637

Une façon de le faire est d'utiliser sys.argv . Cela imprimera le nom du script comme premier argument et tous les autres paramètres que vous lui passez.

import sys

for arg in sys.argv:
    print arg

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