2015-02-02 2 views
0

При запускекак изменить "--help" в argparse

foo.py -h

ИЛИ

foo.py --help,

вы получите " help "о том, как использовать foo.py и какие аргументы он принимает. Есть ли способ, который я могу добавить к этому сообщению? Печать __doc__ например?

+0

Что такое 'foo.py'? Что-то, что вы написали? –

+0

ну, foo.py - всего лишь пример. – Omar

+0

Что делать, если 'foo.py' пуст? Тогда 'foo.py -h' ничего не печатает. Вы должны сказать нам что-то о том, что содержит 'foo.py', чтобы получить содержательный ответ. –

ответ

4

Sure, argparse дает много возможностей настройки. Чтобы «добавить» к справке (напечатайте больше после того, как сообщение справки сделано), например, используйте аргумент epilog с именем.

parser = argparse.ArgumentParser(epilog="That's all she wrote", ...) 

где ... обозначает «любой другие именованные аргументы, которые вы хотите передать в парсер конструктор», сообщение о котором идет речь, будет напечатано на --help после справки о аргументах.

См. https://docs.python.org/3/library/argparse.html за несколько тысяч слов о argparse (написано как ссылка, но с большим количеством примеров) и https://docs.python.org/3/howto/argparse.html#id1 еще на несколько тысяч (написано как учебник). ! Может быть, половина этих документы имеют о том, как точно настроить сообщения для --help или ошибок случаев -)

+2

Отлично! Спасибо за вашу помощь Я использовал ** parser = argparse.ArgumentParser (описание = __ doc__, formatter_class = argparse.RawTextHelpFormatter) ** , чтобы он не пропускал "\ n" – Omar

2

помощи форматирования функции, argparse.ArgumentParser.format_help(), выглядит следующим образом:

def format_help(self): 
     formatter = self._get_formatter() #by default, an instance of argparse.HelpFormatter 

     # usage 
     formatter.add_usage(self.usage, self._actions, 
          self._mutually_exclusive_groups) 

     # description 
     formatter.add_text(self.description) 

     # positionals, optionals and user-defined groups 
     for action_group in self._action_groups: 
      formatter.start_section(action_group.title) 
      formatter.add_text(action_group.description) 
      formatter.add_arguments(action_group._group_actions) 
      formatter.end_section() 

     # epilog 
     formatter.add_text(self.epilog) 

     # determine help from format above 
     return formatter.format_help() 

Таким образом, вы можете

  • настроить строки, используемые (они могут быть переданы в качестве аргументов конструктора, вы, вероятно, заинтересованы в epilog), или
  • заменить по умолчанию HelpFormatter (formatter_class конструктор аргумент), чтобы настроить, каким образом эти строки преобразуются в текст справки
Смежные вопросы