Eu gostaria de usar argparse para analisar argumentos booleanos da linha de comando escritos como "--foo True" ou "--foo True". Por exemplo:
my_program --my_boolean_flag False
No entanto, o código de teste a seguir não faz o que eu gostaria:
import argparse
parser = argparse.ArgumentParser(description="My parser")
parser.add_argument("--my_bool", type=bool)
cmd_line = ["--my_bool", "False"]
parsed_args = parser.parse(cmd_line)
Infelizmente, parsed_args.my_boolavalia como True. Este é o caso mesmo quando eu mudo cmd_linepara ser ["--my_bool", ""], o que é surpreendente, já que é bool("")avaliado em False.
Como posso obter argparse para analisar "False", "F"e sua minúscula variantes para ser False?
parser.add_argument('--feature', dest='feature', type=lambda x:bool(distutils.util.strtobool(x))) . Quando a opção é usada, esta solução garante um booltipo com valor de Trueou False. Quando a opção não for usada, você receberá None. ( distutils.util.strtobool(x)É de outra questão stackoverflow )
parser.add_argument('--my_bool', action='store_true', default=False)
parser.add_argument('--feature', dest='feature', default=False, action='store_true'). Essa solução garante que você sempre obtenha umbooltipo com valorTrueouFalse. (Esta solução tem uma restrição: a sua opção deve ter um valor padrão.)