ASCII искусство в описании optparse - PullRequest
14 голосов
/ 23 августа 2010

Я делаю сценарий оболочки с модулем optparse, просто для удовольствия, поэтому я хотел напечатать хороший описание ascii вместо описания.

Оказывается, этот код:

parser = optparse.OptionParser(
    prog='./spill.py',
    description=u'''
  /     \                                     
  vvvvvvv  /|__/|                             
      I   /O,O   |                            
      I /_____   |      /|/|                 
     J|/^ ^ ^ \  |    /00  |    _//|          
      |^ ^ ^ ^ |W|   |/^^\ |   /oo |         
       \m___m__|_|    \m_m_|   \mm_|         
''',
    epilog='''
        Las cucarachas lograron con exito su plan, echando a los pestilentes sangre caliente de sus cajas de cemento. 
Ahora el hombre es una especie errante en el espacio, un vagabundo errante en las estrellas.''')

выглядит так:

$ ./bin/spill.py -h
Usage: ./spill.py [options]

   /     \                                        vvvvvvv  /|__/|
I   /O,O   |                                   I /_____   |      /|/|
J|/^ ^ ^ \  |    /00  |    _//|                 |^ ^ ^ ^ |W|   |/^^\ |   /oo |
\m___m__|_|    \m_m_|   \mm_|

Options:
  -h, --help            show this help message and exit
#.... bla bla bla, etc

Я безуспешно пробовал различные комбинации косых черт, переносов и пробелов.

Можете ли вы, друг pytonista, помочь мне правильно отобразить Тоторо?

Ответы [ 3 ]

11 голосов
/ 23 августа 2010

Форматировщик по умолчанию, IndentedHelpFormatter, вызывает этот метод:

 def format_description(self, description):
    if description:
        return self._format_text(description) + "\n"
    else:
        return ""

Если вы подкласс IndentedHelpFormatter, вы можете удалить вызов self._format_text, который вызывает проблему:

import optparse

class PlainHelpFormatter(optparse.IndentedHelpFormatter): 
    def format_description(self, description):
        if description:
            return description + "\n"
        else:
            return ""

parser = optparse.OptionParser(
    prog='./spill.py',
    formatter=PlainHelpFormatter(),
    description=u'''
  /     \                                     
  vvvvvvv  /|__/|                             
      I   /O,O   |                            
      I /_____   |      /|/|                 
     J|/^ ^ ^ \  |    /00  |    _//|          
      |^ ^ ^ ^ |W|   |/^^\ |   /oo |         
       \m___m__|_|    \m_m_|   \mm_|         
''',
    epilog='''
        Las cucarachas lograron con exito su plan, echando a los pestilentes sangre caliente de sus cajas de cemento. 
Ahora el hombre es una especie errante en el espacio, un vagabundo errante en las estrellas.''')
(opt,args) = parser.parse_args()
6 голосов
/ 30 марта 2013

Извините за некромантию потока, но для тех, кто обновился до 2.7, теперь вы можете легко отобразить ascII art в вашем описании, просто передав

formatter_class=argparse.RawDescriptionHelpFormatter

argparse.ArgumentParser ()

см. http://docs.python.org/2/library/argparse.html#formatter-class например!

0 голосов
/ 23 августа 2010

Если ничего не помогает, используйте генерацию кода.

Простейшим способом было бы создать текстовый файл, содержащий желаемый результат, и base64 закодировать его и встроить в файл .py, который предоставляет глобальную переменную

Теперь вам нужно включить сгенерированный .py, base64 decode и напечатать глобальную переменную, и все это работает.

...