Это немного связано с темой, рассмотренной в вопросе о том, что нужно задать аргумент несколько раз.
Я хотел бы указать параметр несколько раз, например:
tool --foo 1 --foo 2 --foo 3
И также вот так:
tool a b c
Я также хотел бы поддержать оба одновременно:
tool a b c --foo 1 --foo2 --foo 3
Это отлично работает:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('foo', nargs='*', action='append')
parser.add_argument('--foo', nargs='*', dest='foo', action='append')
Список результатов можно легко сгладить:
args = parser.parse_args('a b c --foo 1 --foo 2 --foo 3'.split())
args.foo = [el for elements in args.foo for el in elements]
дает:
>>> args
Namespace(foo=['a', 'b', 'c', '1', '2', '3'])
Как добавить значение по умолчанию таким образом, что значение по умолчанию не используется, как только один аргумент указан пользователем?
Если вы добавляете только default=[['spam']]
к одному из вызовов add_argument()
, значение по умолчанию всегда является частью результата. Я не могу заставить argparse удалить его сам по себе, как только пользователь сам предоставит аргумент.
Я надеюсь, что существует решение с тем, что argparse
уже обеспечивает себя.