Как напечатать интерфейс справки на argparse с 2 позиционными аргументами?

Я изучаю основы argparse, и я создал программу, которая печатает информацию о солнечной системе в командной строке, однако я использовал 2 позиционных аргумента, что вызывает некоторые сложности. Моя цель состоит в том, чтобы напечатать интерфейс "справки", когда неизвестный аргумент введен в командную строку, но не удалось из-за использования нескольких позиционных аргументов. Использование дополнительных аргументов пока не обсуждается.

Как я могу распечатать справку для неизвестных аргументов? Насколько я понимаю, планету не нужно называть конкретно "планетой", а как-нибудь, а потом и именем планеты, поэтому мне было трудно это сделать.

2 ответа

Возможно, вы ищете взаимоисключающую группу.

parser = argparse.ArgumentParser(description="About the Solar System") # initialises argparse

parser.add_argument("--orderby", help="displays the planets ordered by mass, largest to smallest", action='store_true')
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument("--list", help="displays the planets in alphabetical order", action='store_true')
group.add_argument("planet", help="displays information on the chosen <planet> and opens a wiki page", nargs="?", action="store")

args = parser.parse_args()

что приведет к

 % python3 args.py 
usage: args.py [-h] [--orderby] (--list | planet)
args.py: error: one of the arguments --list planet is required

а также

 % python3 args.py --list
Namespace(list=True, orderby=False, planet=None)

 % python3 args.py asdf  
Namespace(list=False, orderby=False, planet='asdf')

 % python3 args.py --list asdf
usage: args.py [-h] [--orderby] (--list | planet)
args.py: error: argument planet: not allowed with argument --list

Вы хотели бы поднять argParse.ArgumentTypeError с пользовательским типом, есть основной пример, как это сделать здесь: argparse choices структура допустимых значений

Другие вопросы по тегам