Python argparse, как передать False из командной строки?

1

Я пытаюсь разобраться, как передать логическое значение False из командной строки в argparser. Мой оргинальный код выглядел так:

import argparse
parser = argparse.ArgumentParser(allow_abbrev=True)
parser.add_argument('-data', default=True, type=bool, help='uses the history file')
args = parser.parse_args(sys.argv[1:])

Из командной строки я набрал: python myscript.py -data False

Также варианты с одиночными и двойными кавычками вокруг False. Когда я просматриваю содержимое пространства имен args, args.data всегда является True.

Поэтому я изменил определение аргумента с bool на str со строкой "True" по умолчанию, как показано ниже:

parser.add_argument('-data', default="True", type=str, help='uses the history file')

Затем я добавил несколько массивов аргументов, чтобы получить логическое значение, которое я действительно хотел:

if re.search("f", args.data, re.I):
   args.data = False
else:
   args.data = True

Это обходное решение действительно работает. Есть лучший способ сделать это?

Теги:

3 ответа

1

Если аргумент должен быть логическим, вам следует просто использовать store_true или store_false, так что наличие самого параметра приведет к значению True или False, а отсутствие опции приведет к значению False или True, соответственно.

Из документации argparse:

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
>>> parser.add_argument('--bar', action='store_false')
>>> parser.add_argument('--baz', action='store_false')
>>> parser.parse_args('--foo --bar'.split())
Namespace(foo=True, bar=False, baz=True)
  • 0
    Большое спасибо! action = 'store_false' - это то, что мне нужно.
1

Вы можете использовать параметр store_false или store_true для add_argument (см. Документацию argparse). Например, если вы хотите, чтобы значение по умолчанию было True вы можете добавить аргумент с action='store_false':

parser.add_argument('--no-data', action='store_false', help='don't use the history file')

Тогда args.no_data будет False если вы запустите python command.py --no-data и True если вы запустите python command.py без аргумента --no-data.

  • 0
    Большое спасибо! action = 'store_false' - это то, что мне нужно.
1
def my_bool(s):
    return s != 'False'

parser.add_argument('-data',default=True,type=my_bool)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню