отображение новых строк в справочном сообщении при использовании optparse в python - PullRequest
6 голосов
/ 11 мая 2011

Я использую модуль optparse для разбора параметров / аргументов. По причинам обратной совместимости я не могу использовать модуль argparse. Как я могу отформатировать мое послание эпилога, чтобы сохранить новые строки?

В следующем примере я бы хотел, чтобы эпилог печатался в отформатированном виде.

    epi = \
"""
Examples usages:
  Do something
  %prog -a -b foo
  Do something else
  %prog -d -f -h bar
"""
    parser = optparse.OptionParser(epilog=epi)

Ответы [ 3 ]

8 голосов
/ 11 мая 2011

См. Первый ответ на:

python optparse, как включить дополнительную информацию в вывод об использовании?

Основной ответ - создать подкласс OptionParser

class MyParser(optparse.OptionParser):
    def format_epilog(self, formatter):
        return self.epilog
1 голос
/ 01 апреля 2014

Вы можете украсить функцию optparse.HelpFormatter.format_description:

from optparse import HelpFormatter as fmt
def decorate(fn):
    def wrapped(self=None, desc=""):
        return '\n'.join( [ fn(self, s).rstrip() for s in desc.split('\n') ] )
    return wrapped
fmt.format_description = decorate(fmt.format_description)

Таким образом, вы можете получить описание справки, которое выполняет такие вещи:

my_desc = """This is some text
that wraps to some more stuff.\n
\n
And this is a new paragraph.\n
\n
This line comes before\n
this line but not in a different paragraph."""

Работает для меня.:)

0 голосов
/ 13 сентября 2016

Для тех из вас, кто использует ответ пользователя 227667, но хочет заменить %prog в эпилоге, вы можете использовать:

class MyParser(optparse.OptionParser):
    def format_epilog(self, formatter):
        return self.expand_prog_name(self.epilog)

Но в общем случае, если возможно, не используйте optparse.

...