В настоящее время, когда я ввожу недопустимые параметры или опускаю позиционные аргументы, argparse возвращает меня к приглашению и отображает использование моего приложения. Это нормально, но я бы предпочел автоматически отображать полный список справки (объясняющий параметры и т. Д.), Чем требовать от пользователя ввода

./myscript.py -h

Благодарность!

Джейми

26
jpswain.w 3 Сен 2010 в 18:58

3 ответа

Лучший ответ

Эта тема в группах Google содержит следующие фрагмент кода, который, кажется, делает свое дело (слегка измененный).

class DefaultHelpParser(argparse.ArgumentParser):
    def error(self, message):
        sys.stderr.write('error: %s\n' % message)
        self.print_help()
        sys.exit(2)
16
Mike T 31 Июл 2013 в 05:21

Чтобы напечатать справку, вы можете использовать: print_help функцию в ArgumentParser экземпляре

parser = argparse.ArgumentParser()
(...)
parser.print_help()

Чтобы напечатать справочное сообщение об ошибке, вам нужно создать собственный подкласс экземпляра ArgumentParser, который переопределяет метод error(). Например, вот так:

class MyParser(argparse.ArgumentParser): 
   def error(self, message):
      sys.stderr.write('error: %s\n' % message)
      self.print_help()
      sys.exit(2)

Когда этот синтаксический анализатор встречает непарсируемую строку аргумента, он выведет справку

31
jb. 16 Фев 2013 в 16:07

Подавить печать использования с помощью usage=argparse.SUPPRESS. Затем перехватите исключение SystemExit, которое ArgumentParser вызывает при ошибке, распечатайте справку и выйдите, снова вызвав исключение.

parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
parser.add_argument(...)
try:
    args = parser.parse_args()
except SystemExit:
    parser.print_help()
    raise
0
Roger Dahl 7 Ноя 2019 в 07:57