Търсих в много от примерите за подпарсер тук и като цяло, но не мога да разбера това на пръв поглед просто нещо.
Имам два типа var, единият от които има ограничения, така че реших, че subparser е правилният начин. напр. -t позволява или A, или B. Ако потребителят премине A, тогава от него се изисква също да посочи дали е a1 или a2. Ако преминат само B, тогава нищо.
Мога ли да направя това и argparse да ми върне какъв тип A е предаден или дали е бил само B?
Изглежда, че по-долу работи, но по някаква причина се прекъсва при предаване на нещо след подразбора.
напр. от линукс терминал
>> python test01.py -t A a1 -v 61
грешки с...
usage: test01.py a1 [-h]
test01.py a1: error: unrecognized arguments: -v
Надяваме се, че има смисъл.
Кодът:
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='types of A')
parser.add_argument("-t",
choices = ["A", "B"],
dest = "type",
required=True,
action='store',
help="Some help blah blah")
cam_parser = subparsers.add_parser('a1', help='Default')
cam_parser.set_defaults(which='a1')
cam_parser = subparsers.add_parser('a2', help='parse this instead of default')
cam_parser.set_defaults(which='a2')
parser.add_argument("-v",
nargs = '+',
required=True,
dest = "version",
type=int,
action='store',
help="some version help blah blah")
argument = parser.parse_args()
print argument.type
print argument.version