Я пишу Python программу с использованием argparse. У меня есть аргумент для значения идентификатора. Пользователь может указать значение идентификатора для обработки в программе. Или они могут указать -a, чтобы указать, что все идентификаторы должны быть обработаны.
Таким образом, оба следующих значения должны быть действительными:
myprog 5
myprog -a
Но если вы не указали спецификацию c ID, тогда -a требуется, и это должно выдать ошибку.
Я поиграл с взаимоисключающей группой:
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-a', action='store_true', help=argparse.SUPPRESS)
group.add_argument("ID", action='store', nargs='?')
, которая работает, но мои разобранные аргументы заканчивают тем, что были два аргумента:
{'a': True, 'ID': None}
и если я попытаюсь добавить подобную группу после этого, скажем для другого аргумента "max", который может быть максимальным значением или -i, что означает игнорирование максимального значения:
group2 = parser.add_mutually_exclusive_group(required=True)
group2.add_argument('-i', action='store_true', help=argparse.SUPPRESS)
group2.add_argument("max", action='store', nargs='?')
Затем, если я пытаюсь разобрать аргументы ['-a', '2'], выдается сообщение об ошибке:
usage: args_exclusive_group.py [-h] [ID] [max]
args_exclusive_group.py: error: argument ID: not allowed with argument -a
Поскольку он обрабатывает 2 как ID, а не как max , Есть ли что-то действительно простое, что я упускаю, что просто позволило бы указанному позиционному аргументу (ID или max) также взять строку, которая "выглядит как" необязательная, потому что она начинается с "-"?