Cette réponse suggère optparse
qui est approprié pour les anciennes versions de Python. Pour Python 2.7 et plus, argparse
remplace optparse
. Voir cette réponse pour plus d'informations.
Comme d'autres personnes l'ont souligné, il est préférable d'utiliser optparse plutôt que getopt. getopt est en fait une correspondance un-à-un des fonctions standard de la bibliothèque C getopt(3), et n'est pas très facile à utiliser.
optparse, tout en étant un peu plus verbeux, est beaucoup mieux structuré et plus simple à étendre par la suite.
Voici une ligne typique pour ajouter une option à votre analyseur syntaxique :
parser.add_option('-q', '--query',
action="store", dest="query",
help="query string", default="spam")
Elle parle d'elle-même ; au moment du traitement, elle accepte -q ou --query comme options, stocke l'argument dans un attribut appelé query et a une valeur par défaut si vous ne la spécifiez pas. Il est également auto-documenté dans la mesure où vous déclarez l'argument help (qui sera utilisé lors de l'exécution avec -h/--help) directement avec l'option.
D'habitude, tu parsages tes arguments avec :
options, args = parser.parse_args()
Cela va, par défaut, analyser les arguments standard passés au script (sys.argv[1 :]).
options.query sera alors défini à la valeur que vous avez passée au script.
Vous créez un analyseur simplement en faisant
parser = optparse.OptionParser()
Voici les éléments de base dont vous avez besoin. Voici un script Python complet qui le montre :
import optparse
parser = optparse.OptionParser()
parser.add_option('-q', '--query',
action="store", dest="query",
help="query string", default="spam")
options, args = parser.parse_args()
print 'Query string:', options.query
5 lignes de python qui vous montrent les bases.
Enregistrez-le dans sample.py, et exécutez-le une fois avec
python sample.py
et une fois avec
python sample.py --query myquery
Au-delà de cela, vous trouverez qu'optparse est très facile à étendre. Dans un de mes projets, j'ai créé une classe Command qui vous permet d'imbriquer facilement des sous-commandes dans un arbre de commande. Elle utilise fortement optparse pour enchaîner les commandes. Ce n'est pas quelque chose que je peux facilement expliquer en quelques lignes, mais n'hésitez pas à naviguer dans mon référentiel pour la classe principale, ainsi que une classe qui l'utilise et le parseur d'options