2010-08-22 27 views
14

Eğlenceye dalmak için optparse modülü ile bir kabuk komut dosyası yapıyorum, bu yüzden açıklama yerine güzel bir ascii çizimi yazdırmak istedim.Optparse açıklamasındaki ASCII art

bu kod çıkıyor:

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.''') 

bu gibi işler:

$ ./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 

Ben başarılı olamadı eğik çizgiler, satırbaşıyla ve Espaces değişen kombinasyonu denedim.

Arkadaşınız pitonista, Totoro'yu düzgün göstermeme yardımcı olabilir misiniz? Tüm bunlardan başarısız olursa

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() 

cevap

11

varsayılan biçimlendirici, IndentedHelpFormatter, bu yöntemi çağırır kod üretimi kullanın. ,

basit yolu İstenen çıktıyı içeren bir metin dosyası oluşturmak için olurdu ve base64 onu kodlamak ve

Şimdi .py oluşturulan eklemeniz gerekir global değişkeni gösterir bir .py dosyası içerisine sıkıştırılmak base64 kodunu çözer ve global değişkeni yazdırır ve her şey çalışır.

+5

Google çeviri, epilogun şu anlama geldiğini söylüyor: "Hamamböceği, beton kutularının kokuşmuş sıcak kanını başarılı bir şekilde planlamayı başardı. Şimdi adam uzayda dolaşan bir tür, yıldızlarda bir gezgindir." LOL! – unutbu

+0

Aradığım şey gibi görünüyor, teşekkürler, efendim. Çeviri neredeyse doğrudur :) – tutuca

+0

Çok hoşsun, tutuca. Senin epilog merak ediyor! :) – unutbu

0

: Eğer IndentedHelpFormatter alt sınıf ise

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

, Soruna neden olan self._format_text çağrıyı kaldırabilirsiniz:

+0

Şaka yapıyorsun. Sağ? Teklifinizin ruhunu takdir etsem de :) – tutuca

+1

Hayır, şaka yapmıyorum. Daha iyi bir yol olmalı ama eğer bulamazsan, bu işe yarar. – Joshua

6

iplik necromancy fakat

için http://docs.python.org/2/library/argparse.html#formatter-class bkz artık kolayca basitçe argparse.ArgumentParser() için

formatter_class=argparse.RawDescriptionHelpFormatter 

geçirerek açıklamasında ASCII Art görüntüleyebilir 2.7'ye yükseltti olanlar için üzgünüm örnek!