ASCII-Art in der optparse Beschreibung
Frage
Ich mache einen Shell-Skript mit dem optparse Modul, jut für Spaß, so dass ich ein schöne ascii Zeichnung anstelle der Beschreibung drucken wollte.
Es stellt sich heraus, dass dieser Code:
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.''')
macht wie folgt aus:
$ ./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
Ich habe eine Variierung Kombination aus Schrägstrichen versucht, Zeilenumbrüche und espaces ohne Erfolg.
Können Sie, Freund pytonista, hilf mir Totoro richtig angezeigt?
Lösung
Das Standard-Formatierungsprogramm, IndentedHelpFormatter
, ruft diese Methode:
def format_description(self, description):
if description:
return self._format_text(description) + "\n"
else:
return ""
Wenn Sie Unterklasse IndentedHelpFormatter
, können Sie den self._format_text
Anruf entfernen, die das Problem verursacht:
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()
Andere Tipps
Sorry für den Thread Nekromantie, aber für diejenigen, die 2.7 aufgerüstet Sie jetzt leicht Ascii Art in Ihrer Beschreibung durch einfaches Durchleiten
angezeigt werden könnenformatter_class=argparse.RawDescriptionHelpFormatter
zu argparse.ArgumentParser ()
finden Sie unter http://docs.python.org/2/library /argparse.html#formatter-class zum Beispiel!
Wenn alles andere fehlschlägt, verwenden Sie Code-Generierung.
Der einfachste Weg wäre, eine Textdatei erstellen Sie Ihre gewünschte Ausgabe enthält, und base64 kodieren und betten sie in einer Py-Datei, die eine globale Variable aussetzt
Nun müssen Sie die erzeugte Py, Base64 dekodieren sind, und drucken Sie die globale Variable und alles funktioniert.