2010-08-22 10 views
14

मैं ऑप्टपर मॉड्यूल के साथ एक शेल स्क्रिप्ट बना रहा हूं, मज़ा के लिए जूट, इसलिए मैं वर्णन के स्थान पर एक अच्छा एसीआई ड्राइंग प्रिंट करना चाहता था।ऑप्टस्पेर विवरण में 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 

मैं सफलता के बिना स्लैश, नई-पंक्तियों और espaces की एक अलग संयोजन की कोशिश की है।

क्या आप दोस्त प्यटोनिस्टा, मुझे टोटोरो को सही तरीके से प्रदर्शित करने में मदद कर सकते हैं?

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

आप IndentedHelpFormatter उपवर्ग हैं, तो आप self._format_text कॉल जो समस्या का कारण है हटा सकते हैं::

उत्तर

11

डिफ़ॉल्ट फ़ॉर्मेटर, IndentedHelpFormatter, इस विधि कॉल

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

Google अनुवाद का कहना है कि उपन्यास का अर्थ है: "कॉकरोच सफलतापूर्वक योजना बनाने में सक्षम थे, जो उनके ठोस बक्से के डूबने वाले गर्म खून को फेंक देते थे। अब आदमी अंतरिक्ष में घूमने की एक प्रजाति है, सितारों में एक भटकनेवाला है।" जबरदस्त हंसी! – unutbu

+0

जैसा लगता है कि मैं क्या देख रहा हूं, आपको बहुत धन्यवाद, महोदय। अनुवाद लगभग सटीक है :) – tutuca

+0

आपका स्वागत है, tutuca। आपका epilog दिलचस्प है! :) – unutbu

0

यदि सब विफल रहता है, कोड पीढ़ी का प्रयोग करें।

सबसे आसान तरीका है अपने वांछित उत्पादन वाला एक पाठ फ़ाइल बनाने के लिए होगा, और base64 यह सांकेतिक शब्दों में बदलना और एक .py फ़ाइल है कि एक वैश्विक चर

अब आप उत्पन्न .py शामिल करने की जरूरत को उजागर करता है में एम्बेड, बेस 64 डीकोड, और वैश्विक चर मुद्रित करें और यह सब काम करता है।

+0

आप मुझसे मजाक कर रहे हैं। सही? हालांकि मैं आपके प्रस्ताव की भावना की सराहना करता हूं :) – tutuca

+1

नहीं, मैं मजाक नहीं कर रहा हूं। एक बेहतर तरीका होना चाहिए लेकिन अगर आपको यह नहीं मिल रहा है, तो यह काम करता है। – Joshua

6

क्षमा करें धागा काला जादू के लिए, लेकिन जो लोग 2.7 करने के लिए उन्नत अब आप आसानी से बस

formatter_class=argparse.RawDescriptionHelpFormatter 

गुजर argparse.ArgumentParser() करने के लिए से अपने विवरण में ASCII आर्ट प्रदर्शित कर सकते हैं

के लिए http://docs.python.org/2/library/argparse.html#formatter-class देखने के लिए उदाहरण!

संबंधित मुद्दे