2016-03-15 2 views
1

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

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

+0

Ваш текущий набор аргументов является довольно странным. Вам действительно нужна программа, чтобы оба могли перечислить (подкоманду) и отобразить информацию на выбранной планете одновременно? Либо создайте подкоманды списка и отображения, либо сделайте список флагом, даже если вы скажете, что это не может быть и речи. –

+0

Обычно мы ожидаем, что вопросы 'argparse' должны включать в себя' parser', как определено до сих пор, и некоторые примерные строки команд и требуемый синтаксический анализ. Трудно сказать из текста, как это, что вы хотите и что вы пробовали. – hpaulj

+0

Аргумент, позиционный или помеченный, может принимать параметр 'choice', например. 'choice = ['mercury', 'venus', 'earth', ...]'. – hpaulj

ответ

1

Возможно, что вы после этого является mutually exclusive group.

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 
Смежные вопросы