J'ai remarqué que la documentation Python 2.7 inclut encore un autre module d'analyse en ligne de commande. En plus de getopt
et optparse
, nous avons maintenant argparse
.
Pourquoi un autre module d’analyse de ligne de commande a-t-il été créé? Pourquoi devrais-je l'utiliser au lieu de optparse
? Existe-t-il de nouvelles fonctionnalités que je devrais connaître?
À partir de python 2.7
, optparse
est obsolète et, espérons-le, disparaîtra dans le futur.
argparse
est préférable pour toutes les raisons énumérées sur sa page d'origine ( https://code.google.com/archive/p/argparse/ ):
+
et /
Des informations complémentaires sont également disponibles dans PEP 389 , qui est le véhicule par lequel argparse
a été intégré à la bibliothèque standard.
Pourquoi devrais-je l'utiliser au lieu de optparse? Sont leurs nouvelles fonctionnalités que je devrais connaître?
La réponse de @ Nicholas couvre bien cela, je pense, mais pas la question plus méta par laquelle vous commencez:
Pourquoi un autre module d’analyse de ligne de commande a-t-il été créé?
C'est le dilemme numéro un lorsqu'un module utile est ajouté à la bibliothèque standard: que faites-vous lorsque se présente un moyen nettement meilleur, mais incompatible avec les versions antérieures, de fournir le même type de fonctionnalité?
Soit vous vous en tenez à l’ancienne méthode certes dépassée (en général, lorsque nous parlons de paquets compliqués: asyncore vs torsadé, tkinter vs wx ou Qt, ...) ou vous vous retrouvez avec plusieurs façons incompatibles de faire la même chose (XML Les analyseurs syntaxiques, à mon humble avis, en sont un exemple encore meilleur que les analyseurs syntaxiques en ligne de commande - mais le paquetage email
par rapport à la myriade de manières de traiter des problèmes similaires n’est pas très loin non plus ;-).
Vous pouvez faire des reproches menaçants dans la documentation au sujet des anciennes méthodes "déconseillées", mais (tant que vous devez conserver la compatibilité ascendante), vous ne pouvez pas vraiment les supprimer sans empêcher les applications volumineuses et importantes de passer à de nouvelles Python communiqués.
(Le dilemme numéro deux, qui n'est pas directement lié à votre question, est résumé dans le vieil adage "la bibliothèque standard est l'endroit où les bons paquets vont mourir" ... avec des versions tous les ans et demi environ, des paquets qui ne sont pas très volumineux, très stable, pas ayant besoin de versions plus souvent que cela, peut en réalité beaucoup souffrir d'être "figé" dans la bibliothèque standard ... mais c'est vraiment un problème différent) .
La meilleure source de justification pour un ajout de Python serait son PEP: PEP 389: argparse - Nouveau module d’analyse de ligne de commande , dans en particulier, la section intitulée, Pourquoi getopt et optparse ne suffisent-ils pas?
Il y a aussi de nouveaux enfants sur le bloc!
Si vous avez besoin d’une comparaison plus approfondie, veuillez lire this et vous pourriez utiliser docopt ou cliquez sur . Merci à Kyle Purdon!
Au début, j'étais aussi réticent que @fmark à passer d'optparse à argparse, car:
Ensuite, j'ai vu ce document, argparse surpasse optparse, en particulier lorsqu'il est question de générer un message d'aide significatif: http://argparse.googlecode.com/svn/trunk/doc/argparse-vs-optparse.html
Et puis j'ai vu " argparse vs. optparse " de @Nicholas, disant que nous pouvons avoir argparse disponible dans python <2.7 (Oui, je ne le savais pas auparavant.)
Maintenant, mes deux préoccupations sont bien prises en compte. J'ai écrit ceci en espérant que cela aidera les autres avec un état d'esprit similaire.