Я хотел бы определить разные подпарамеры в script, причем оба варианта наследования от общего родителя, но с разными значениями по умолчанию. Однако он работает не так, как ожидалось.
Вот что я сделал:
import argparse
# this is the top level parser
parser = argparse.ArgumentParser(description='bla bla')
# this serves as a parent parser
base_parser = argparse.ArgumentParser(add_help=False)
base_parser.add_argument('-n', help='number', type=int)
# subparsers
subparsers = parser.add_subparsers()
subparser1= subparsers.add_parser('a', help='subparser 1',
parents=[base_parser])
subparser1.set_defaults(n=50)
subparser2 = subparsers.add_parser('b', help='subparser 2',
parents=[base_parser])
subparser2.set_defaults(n=20)
args = parser.parse_args()
print args
Когда я запускаю script из командной строки, это то, что я получаю:
$ python subparse.py b
Namespace(n=20)
$ python subparse.py a
Namespace(n=20)
По-видимому, второй set_defaults
перезаписывает первый в родительском. Поскольку в документации argparse (что довольно подробно) не было ничего об этом, я подумал, что это может быть ошибкой.
Есть ли для этого какое-то простое решение? После этого я мог бы проверить переменную args
и заменить значения None
на значения по умолчанию для каждого подпарамера, но это то, что я ожидал от argparse для меня.
Это, кстати, Python 2.7.