code: def _print_help(self):
          
          options = self._print_usage('\n  ', file=sys.stdout)
          if self.docstring:
              print()
              try:
                  doc_string = self.docstring.format(**self._variables)
              except KeyError:
                  doc_string = self.docstring
              for doc in doc_string.split('\n'):
                  doc = doc.strip()
                  if len(doc) > 2:
                      print(textwrap.fill(textwrap.dedent(doc).strip(),
                                          width=80, initial_indent='  ',
                                          subsequent_indent='   '))
          print()
          if options:
              print('Options:')
              width = max(len(k) for k in self._options)
              for x, t in self._options.items():
                  print(self._format_option(x, t, width))
              if self._get_variable('VERSION'):
                  print('{0:{1}}'.format(self._version_options[0], width), end=' ')
                  print('| ' + ' | '.join(self._version_options[1:]), 'print version',
                        '(%s)' % self._get_variable('VERSION'))
              print('{0:{1}}'.format(self._help_options[0], width), end=' ')
              print('| ' + ' | '.join(self._help_options[1:]), 'print this help')
              print()
docs: Help is automatically generated from the __doc__ of the subclass if present
          and from the names of the args of run(). Therefore args names selection
          is more important than ever here !