Искусство ASCII в описании optparse
Я делаю оболочку script с модулем optparse, jut для удовольствия, поэтому я хотел напечатать красивый рисунок 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
Я пробовал переменную комбинацию слэшей, новых строк и пробелов без успеха.
Можете ли вы, друг пирониста, помочь мне правильно показать Тоторо?
Ответы
Ответ 1
Формат текста по умолчанию 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()
Ответ 2
Извините за некромантию нити, но для тех, кто обновился до версии 2.7, вы теперь можете легко отобразить ascII-арт в своем описании, просто пропустив
formatter_class=argparse.RawDescriptionHelpFormatter
to argparse.ArgumentParser()
см. http://docs.python.org/2/library/argparse.html#formatter-class, например!
Ответ 3
Если все остальное не удается, используйте генерацию кода.
Самый простой способ - создать текстовый файл, содержащий требуемый вывод, и base64 закодировать его и вставить в файл .py, который предоставляет глобальную переменную
Теперь вам нужно включить сгенерированный декодер .py, base64 и напечатать глобальную переменную, и все это работает.