Bonjour rtanpo440.
L'analyseur de ligne de commande standard de Python argparse est sympa! Je suis nouveau dans Python et je n'y suis pas encore habitué, mais je pensais que l'analyseur de ligne de commande était si facile à écrire.
Et argparse générera automatiquement de l'aide pour vous. L'option -h`` --help
est automatiquement ajoutée et vous pouvez la voir correctement sans avoir à ajouter_argument
vous-même.
Documentation: https://docs.python.org/ja/3/library/argparse.html
Cependant, il n'y a qu'un seul cas. Autrement dit, le format et la description de chaque option sont dépassés, ce qui le rend difficile à lire.
before
#!/usr/bin/python3
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-m', '--foo', help='Foo foo foo.')
parser.add_argument('-l', '--bar', nargs='+', help='Bar bar bar.')
parser.add_argument('-o', '--long-long-long-option', action='store_true', help='Just a so long option, but do nothing')
parser.parse_args()
Par défaut, la description de chaque option semble être affichée à partir d'une position fixe quel que soit le nombre de caractères du format. Même si le format est long, il ne sera pas enveloppé et la description sera affichée sur la ligne suivante, de sorte que le format s'étendra au-delà de la colonne de description.
C'est difficile à lire !! Que dois-je faire ... Quand je regardais le document, il semble y avoir quelque chose qui s'appelle HelpFormatter
. Comme son nom l'indique, il personnalise le format de l'aide et il semble que quatre sous-classes avec des fonctions telles que l'affichage des valeurs par défaut et la préservation des sauts de ligne soient fournies par défaut.
…… Mais la documentation officielle expliquait les quatre sous-classes fournies par défaut, mais je ne savais pas comment hériter et personnaliser le HelpFormatter
par moi-même, alors référez-vous à son implémentation. Je l'ai essayé en tâtonnant.
L'explication sur le côté droit est affichée à la 24ème position lorsque le bord gauche de l'écran est réglé sur 0, donc quand j'ai recherché 24, j'ai trouvé quelque chose comme ça.
self._max_help_position
semble être impliqué dans ce problème. Ensuite, héritez de force de quelle classe et écrasez self._max_help_position
!!
Après de nombreuses expérimentations, le code ci-dessous a fonctionné.
Crée «ForceOneLineHelpFormatter» en héritant de «HelpFormatter».
after
#!/usr/bin/python3
import argparse
class ForceOneLineHelpFormatter(argparse.HelpFormatter):
def __init__(self, *args, **namedargs):
super().__init__(*args, **namedargs)
self._max_help_position = 999
parser = argparse.ArgumentParser(formatter_class=ForceOneLineHelpFormatter)
parser.add_argument('-m', '--foo', help='Foo foo foo.')
parser.add_argument('-l', '--bar', nargs='+', help='Bar bar bar.')
parser.add_argument('-o', '--long-long-long-option', action='store_true', help='Just a so long option, but do nothing')
parser.parse_args()
J'ai mis self._max_help_position
à 999 pour une raison quelconque, mais il semble qu'il soit automatiquement ajusté en interne afin qu'il n'y ait pas trop d'espace entre le format à gauche et la description à droite. En d'autres termes, si cette valeur est juste suffisamment plus grande que la largeur d'écran attendue, il n'y a pas de problème.
Et voici le résultat de son exécution avec --help
.
Oh! Bon sentiment! Mais il y a peut-être une meilleure façon ...
--Si l'aide d'argparse est difficile à lire en raison du format et de la description facultatifs, créez une sous-classe de ʻargparse.HelpFormatter. --Et définissez
_max_help_position sur une valeur élevée telle que 999 dans
init`.