L'analyse des arguments à partir de la ligne de commande peut être simplifiée à l'aide du module argparse en Python. Bien qu'il prenne en charge l'analyse des indicateurs booléens, certains scénarios peuvent conduire à des résultats inattendus.
Pour analyser correctement les valeurs booléennes telles que "--foo True" ou "--foo False", le comportement par défaut d'argparse peut ne pas suffire. Par exemple, l'utilisation de type=bool seul peut entraîner des résultats inattendus lorsque les arguments sont définis sur "False" ou sur des chaînes vides.
Une solution consiste à exploiter la BooleanOptionalAction introduite dans Python 3.9. Cette action offre une gestion plus intuitive des valeurs booléennes, convertissant automatiquement True, t, y, yes et 1 en True et False, f, n, no et 0 en False.
Pour les versions Python antérieures 3.9, une solution de contournement consiste à combiner les actions « store_true » et « store_false ». L'action 'store_true' définit un indicateur sur True lorsqu'il est présent, tandis que 'store_false' le définit sur False. Par défaut, l'indicateur est supposé être True, permettant aux utilisateurs de spécifier des indicateurs positifs et négatifs :
<code class="python">import argparse parser = argparse.ArgumentParser(description="My parser") parser.add_argument('--feature', action='store_true') parser.add_argument('--no-feature', dest='feature', action='store_false') parser.set_defaults(feature=True) cmd_line = ["--no-feature"] parsed_args = parser.parse_args(cmd_line) if parsed_args.feature: print("Feature is True.") else: print("Feature is False.")</code>
Alternativement, des fonctions personnalisées peuvent être définies pour gérer une logique d'analyse spécifique. Par exemple, une fonction qui fait la distinction entre « Vrai » et « Faux » sans tenir compte de la casse :
<code class="python">def t_or_f(arg): ua = str(arg).upper() if 'TRUE'.startswith(ua): return True elif 'FALSE'.startswith(ua): return False else: raise ValueError("Invalid argument: {}".format(arg))</code>
Cette fonction peut ensuite être utilisée avec le paramètre de type d'argparse :
<code class="python">import argparse parser = argparse.ArgumentParser(description="My parser") parser.add_argument('--my_bool', type=t_or_f) cmd_line = ["--my_bool", "False"] parsed_args = parser.parse_args(cmd_line) if parsed_args.my_bool: print("my_bool is True.") else: print("my_bool is False.")</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!