Python argparse: Как я могу автоматически отображать справку об ошибке?

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

./myscript.py -h

Спасибо!

Джейми

Ответ 1

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

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

Ответ 2

Чтобы распечатать справку, которую вы можете использовать: 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)

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