2015-04-13 8 views
6

प्रदर्शित करने में मदद करते हैं मैं argparse in Python2.7 का उपयोग कर रहा हूं और मैं तर्क के सहायता पाठ में एकाधिक पंक्तियां प्रदर्शित करना चाहता हूं।पायथन Argparse में एकाधिक लाइनें

मेरे कोड इस तरह दिखेगा:

import argparse 

parser = argparse.ArgumentParser(description='details', 
     usage='use "%(prog)s --help" for more information') 

parser.add_argument('--argument', default=None, type=sometype, 
     help=''' 
      First line \n 
      Second line \n 
      \n 
      More lines \n 
      ''') 

मैं इसे कई पंक्तियों में सहायता संदेश मुद्रित करने के लिए जब --help बुला चाहते हैं। हालांकि, आउटपुट निम्नानुसार दिखता है।

First line Second line More lines 

मुझे पता है कि मैं प्रत्येक पंक्ति के तार जोड़कर समस्या को हल कर सकता हूं।

parser.add_argument('--argument', default=None, type=sometype, 
     help='First line \n' + 
      'Second line \n' + 
      '\n'    + 
      'More lines') 

लेकिन कई पंक्तियां हैं जिन्हें मैं सहायता टेक्स्ट में जोड़ना चाहता हूं। मैं सोच रहा था कि सहायता पाठ को कई पंक्तियों में विभाजित करने का एक सुविधाजनक तरीका है?

और यह भी लगता है कि वर्णों की संख्या की ऊपरी सीमा है जो सहायता संदेश में एक पंक्ति में प्रदर्शित की जा सकती है, जो मेरे मामले में 54 है। क्या यह सीमा प्रणाली-निर्भर है और क्या ऊपरी सीमा बढ़ाने का कोई तरीका है?

+1

Argparse उद्देश्य पर न्यूलाइन को साफ़ करता है क्योंकि यह टर्मिनल आकार के आधार पर पाठ को रीफ्लो करने में संभालता है। –

+0

मैं देखता हूं, इसलिए प्रत्येक पंक्ति में वर्णों की संख्या के लिए ऊपरी सीमा सिस्टम-निर्भर है। –

+0

[पाइथन Argparse का संभावित डुप्लिकेट: सहायता पाठ में नई लाइन कैसे डालें?] (Http://stackoverflow.com/questions/3853722/python-argparse-how-to-insert-newline-in-the-help-text) –

उत्तर

9

डिफ़ॉल्ट मदद फ़ॉर्मेटर फिर से wraps लाइनों अपने टर्मिनल फिट करने के लिए (यह लग रहा है COLUMNS पर्यावरण परिवर्तक आउटपुट चौड़ाई निर्धारित करने के लिए, कुल 80 वर्णों को डिफ़ॉल्ट)।

formatter_class section से:

डिफ़ॉल्ट रूप से, ArgumentParser वस्तुओं विवरण और कमांड लाइन मदद संदेश में उपसंहार ग्रंथों लाइन लपेट दें।

RawTextHelpFormatter सहायता पाठ के सभी प्रकार, तर्क वर्णन शामिल के लिए खाली स्थान के बनाए रखता है:

संकेत मिलता है कि आप पहले से ही लाइनों लिपटे बजाय RawTextHelpFormatter वर्ग का प्रयोग करें।

अपने कोड देखो चाहते हैं कि तरह के लिए

:

parser = argparse.ArgumentParser(description='details', 
     usage='use "%(prog)s --help" for more information', 
     formatter_class=argparse.RawTextHelpFormatter) 

देखना है कि तुम भी कई नई-पंक्तियों को जोड़ने नहीं है, ट्रिपल-उद्धृत तार में स्ट्रिंग में छोड़ने वाली न्यूलाइन शामिल हैं। जैसे आप \n पात्रों की जरूरत नहीं है:

>>> import argparse 
>>> parser = argparse.ArgumentParser(description='details', 
...   usage='use "%(prog)s --help" for more information', 
...   formatter_class=argparse.RawTextHelpFormatter) 
>>> parser.add_argument('--argument', default=None, 
...   help=''' 
...    First line 
...    Second line 
... 
...    More lines 
...    ''') 
_StoreAction(option_strings=['--argument'], dest='argument', nargs=None, const=None, default=None, type=None, choices=None, help='\n    First line\n    Second line\n\n    More lines\n    ', metavar=None) 
>>> parser.print_help() 
usage: use " --help" for more information 

details 

optional arguments: 
    -h, --help   show this help message and exit 
    --argument ARGUMENT 
            First line 
            Second line 

            More lines 
+0

RawTextHelpFormatter काम करता है! :) –

-2

सरल बात तुम कर सकते हो एक सरणी में लाइनों जगह और फिर उन्हें इतना की तरह नई-पंक्तियों के साथ शामिल होने के लिए होगा:

help_lines = ['First line', 'Second line', '', 'More lines'] 
# ... 
parser.add_argument('--argument', default=None, type=sometype, 
help='\n'.join(help_lines)) 
+5

यह अभी भी * सटीक समान स्ट्रिंग मान * में परिणाम देता है। ऐसा इसलिए है क्योंकि न्यूलाइन को जानबूझकर मदद फ़ॉर्मेटर द्वारा हटा दिया जाता है। –

5

यह करने के लिए एक और आसान तरीका शामिल करने के लिए textwrap है।

उदाहरण के लिए,

import argparse, textwrap 
parser = argparse.ArgumentParser(description='Prepare input file', 
     usage='use "python %(prog)s --help" for more information', 
     formatter_class=argparse.RawTextHelpFormatter) 

parser.add_argument('--argument', default=somedefault, type=sometype, 
     help= textwrap.dedent('''\ 
     First line 
     Second line 
     More lines ... 
     ''')) 

इस तरह, हम एक उत्पादन लाइन के सामने लंबे समय से खाली जगह से बच सकते हैं।

usage: use "python your_python_program.py --help" for more information 

Prepare input file 

optional arguments: 
-h, --help   show this help message and exit 
--argument ARGUMENT 
         First line 
         Second line 
         More lines ... 
संबंधित मुद्दे