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_bool
avalia como True
. Este é o caso mesmo quando eu mudo cmd_line
para 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 bool
tipo com valor de True
ou 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 umbool
tipo com valorTrue
ouFalse
. (Esta solução tem uma restrição: a sua opção deve ter um valor padrão.)