दिलचस्प पोस्ट
सी # कोड स्निपेट के आंशिक पैरामीटर का प्रारूपण एंड्रॉइड में सभी चलने वाले एप्लिकेशन को कैसे मारेंगे? क्या मैं एक ही समय में ट्विटर बूटस्ट्रैप और jQuery यूआई का उपयोग कर सकता हूं? Matplotlib में ट्यूपल्स की एक सूची से एक 3 डी सतह का प्लॉटिंग PHP रेखांकन के साथ रिक्त स्थान की जगह है सुरुचिपूर्ण पायथन समारोह को सर्कल कैसीज में परिवर्तित करने के लिए? LINK: घातक त्रुटि LNK1104: फ़ाइल 'डी: \ … … MyProj.exe' को नहीं खोल सकता कस्टम इंटरेक्टिव संक्रमण एनीमेशन जावास्क्रिप्ट किसी भी वेब पेज के स्रोत को पढ़ सकता है? मैं फ़ायरफ़ॉक्स ऐडॉन कैसे लिखूं? एंड्रॉइड: सभी ऐप का साफ़ कैश? क्या सी # में बिग फ्लाट क्लास है? संगतता: सी ++ 11 मेमोरी मॉडल में परमाणु और अस्थिर मैक्रो में जी ++ प्रीप्रोसेसर आउटपुट को एक नई लाइन कैसे बनाएं? PHP में वैश्विक चर और फ़ंक्शन मापदंडों के बीच लाभ / हानि?

अजगर उद्धरण: सहायता टेक्स्ट में नई पंक्ति कैसे सम्मिलित करें?

मैं इनपुट विकल्प पार्स करने के लिए पायथन 2.7 में argparse का उपयोग कर रहा हूँ। मेरे विकल्पों में से एक एक बहु पसंद है मैं इसकी सहायता पाठ में एक सूची बनाना चाहता हूं, उदा

 from argparse import ArgumentParser parser = ArgumentParser(description='test') parser.add_argument('-g', choices=['a', 'b', 'g', 'd', 'e'], default='a', help="Some option, where\n" " a = alpha\n" " b = beta\n" " g = gamma\n" " d = delta\n" " e = epsilon") parser.parse_args() 

हालांकि, argparse सभी newlines और लगातार रिक्त स्थान स्ट्रिप्स। परिणाम दिखता है

 ~ / डाउनलोड: 52 $ पायथन 2.7 x.py -एच
 उपयोग: x.py [-h] [-g {a, b, g, d, e}]

 परीक्षा

 वैकल्पिक तर्क:
   -एच, --help यह सहायता संदेश दिखाएं और बाहर निकलें
   -जी {ए, बी, जी, डी, ई} कुछ विकल्प, जहां ए = अल्फा बी = बीटा जी = गामा डी = डेल्टा ई
                   = एप्सिलॉन

सहायता टेक्स्ट में न्यूलाइन कैसे सम्मिलित करें?

Solutions Collecting From Web of "अजगर उद्धरण: सहायता टेक्स्ट में नई पंक्ति कैसे सम्मिलित करें?"

RawTextHelpFormatter का उपयोग करने का प्रयास करें:

 from argparse import RawTextHelpFormatter parser = ArgumentParser(description='test', formatter_class=RawTextHelpFormatter) 

यदि आप एक विकल्प ओवरराइड करना चाहते हैं, तो आपको RawTextHelpFormatter उपयोग नहीं करना चाहिए इसके बजाय HelpFormatter उप-वर्ग और उन विकल्प के लिए एक विशेष परिचय प्रदान करें जिन्हें "कच्चा" (मैं "R|rest of help" ) को संभालना चाहिए:

 import argparse class SmartFormatter(argparse.HelpFormatter): def _split_lines(self, text, width): if text.startswith('R|'): return text[2:].splitlines() # this is the RawTextHelpFormatter._split_lines return argparse.HelpFormatter._split_lines(self, text, width) 

और इसका प्रयोग करें:

 from argparse import ArgumentParser parser = ArgumentParser(description='test', formatter_class=SmartFormatter) parser.add_argument('-g', choices=['a', 'b', 'g', 'd', 'e'], default='a', help="R|Some option, where\n" " a = alpha\n" " b = beta\n" " g = gamma\n" " d = delta\n" " e = epsilon") parser.parse_args() 

किसी भी अन्य कॉल को .add_argument() जहां R| साथ सहायता शुरू नहीं होती है R| सामान्य रूप में लपेटे जायेंगे

यह अर्गर्स पर मेरे सुधारों का एक हिस्सा है पूर्ण SmartFormatter भी सभी विकल्पों के लिए डिफ़ॉल्ट जोड़ने, और उपयोगिताओं विवरण के कच्चे इनपुट का समर्थन करता है। पूर्ण संस्करण की अपनी _split_lines विधि है, ताकि किसी भी स्वरूपण को संस्करण स्ट्रिंग जैसे संरक्षित किया गया हो:

 parser.add_argument('--version', '-v', action="version", version="version...\n 42!") 

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

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

 import argparse, textwrap parser = argparse.ArgumentParser(description='some information', 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 ... 

मैंने इसी तरह की समस्या का सामना किया है (पायथन 2.7.6)। मैंने RawTextHelpFormatter का उपयोग करके कई पंक्तियों में वर्णन अनुभाग को तोड़ने का RawTextHelpFormatter :

 parser = ArgumentParser(description="""First paragraph Second paragraph Third paragraph""", usage='%(prog)s [OPTIONS]', formatter_class=RawTextHelpFormatter) options = parser.parse_args() 

और पा लिया:

 उपयोग: play-with-argparse.py [विकल्प]

 पहला अनुच्छेद 

                         दूसरा अनुच्छेद

                         तीसरा पैराग्राफ

 वैकल्पिक तर्क:
   -एच, --help यह सहायता संदेश दिखाएं और बाहर निकलें

तो RawTextHelpFormatter समाधान नहीं है क्योंकि यह विवरण मुद्रित करता है क्योंकि यह सोर्स कोड में दिखाई देता है, सभी सफेद स्थान वर्णों को संरक्षित करता है (मैं पठनीयता के लिए अपने स्रोत कोड में अतिरिक्त टैब रखना चाहता हूं, लेकिन मैं उन सभी को मुद्रित नहीं करना चाहता हूँ। इसके अलावा कच्चे formatter लाइन रैप नहीं करता है बहुत लंबा, उदाहरण के लिए 80 से अधिक वर्ण)।

@ एंटन के लिए धन्यवाद जो ऊपर सही दिशा को प्रेरित किया। लेकिन उस समाधान के विवरण स्वरूप को प्रारूपित करने के लिए कुछ बदलाव की आवश्यकता है।

वैसे भी, कस्टम formatter की जरूरत है। मैंने मौजूदा HelpFormatter वर्ग को बढ़ा दिया है और इस तरह से _fill_text विधि को ओवरराइड करें:

 import textwrap as _textwrap class MultilineFormatter(argparse.HelpFormatter): def _fill_text(self, text, width, indent): text = self._whitespace_matcher.sub(' ', text).strip() paragraphs = text.split('|n ') multiline_text = '' for paragraph in paragraphs: formatted_paragraph = _textwrap.fill(paragraph, width, initial_indent=indent, subsequent_indent=indent) + '\n\n' multiline_text = multiline_text + formatted_paragraph return multiline_text 

मूल स्रोत कोड के साथ तुलना करें आर्गपर्स मॉड्यूल से आ रहा है:

 def _fill_text(self, text, width, indent): text = self._whitespace_matcher.sub(' ', text).strip() return _textwrap.fill(text, width, initial_indent=indent, subsequent_indent=indent) 

मूल कोड में पूरे वर्णन को लपेटा जा रहा है। ऊपर कस्टम प्रपत्र में पूरे पाठ को कई खंडों में विभाजित किया जाता है, और उनमें से प्रत्येक को स्वतंत्र रूप से स्वरूपित किया जाता है

इसलिए कस्टम फॉर्मेटर की सहायता से:

 parser = ArgumentParser(description= """First paragraph |n Second paragraph |n Third paragraph""", usage='%(prog)s [OPTIONS]', formatter_class=MultilineFormatter) options = parser.parse_args() 

उत्पादन है:

 उपयोग: play-with-argparse.py [विकल्प]

 पहला अनुच्छेद

 दूसरा अनुच्छेद

 तीसरा पैराग्राफ

 वैकल्पिक तर्क:
   -एच, --help यह सहायता संदेश दिखाएं और बाहर निकलें

मुझे वर्णन पाठ में मैनुअल लाइन ब्रेक और इसके ऑटो रैपिंग करना है; लेकिन यहां दिए गए सुझावों में से कोई भी मेरे लिए काम नहीं करता – इसलिए मैंने यहां दिए गए उत्तर में दिए गए SmartFormatter वर्ग को संशोधित किया; Argparse विधि नामों के साथ मुद्दों के बावजूद एक सार्वजनिक एपीआई नहीं है, यहां यह है कि मेरे पास (एक फ़ाइल के रूप में जिसे test.py कहा test.py ):

 import argparse from argparse import RawDescriptionHelpFormatter # call with: python test.py -h class SmartDescriptionFormatter(argparse.RawDescriptionHelpFormatter): #def _split_lines(self, text, width): # RawTextHelpFormatter, although function name might change depending on Python def _fill_text(self, text, width, indent): # RawDescriptionHelpFormatter, although function name might change depending on Python #print("splot",text) if text.startswith('R|'): paragraphs = text[2:].splitlines() rebroken = [argparse._textwrap.wrap(tpar, width) for tpar in paragraphs] #print(rebroken) rebrokenstr = [] for tlinearr in rebroken: if (len(tlinearr) == 0): rebrokenstr.append("") else: for tlinepiece in tlinearr: rebrokenstr.append(tlinepiece) #print(rebrokenstr) return '\n'.join(rebrokenstr) #(argparse._textwrap.wrap(text[2:], width)) # this is the RawTextHelpFormatter._split_lines #return argparse.HelpFormatter._split_lines(self, text, width) return argparse.RawDescriptionHelpFormatter._fill_text(self, text, width, indent) parser = argparse.ArgumentParser(formatter_class=SmartDescriptionFormatter, description="""R|Blahbla bla blah blahh/blahbla (bla blah-blabla) a blahblah bl a blaha-blah .blah blah Blah blah bla blahblah, bla blahblah blah blah bl blblah bl blahb; blah bl blah bl bl a blah, bla blahb bl: blah blahblah blah bl blah blahblah""") options = parser.parse_args() 

यह 2.7 और 3.4 में कैसे काम करता है:

 $ python test.py -h usage: test.py [-h] Blahbla bla blah blahh/blahbla (bla blah-blabla) a blahblah bl a blaha-blah .blah blah Blah blah bla blahblah, bla blahblah blah blah bl blblah bl blahb; blah bl blah bl bl a blah, bla blahb bl: blah blahblah blah bl blah blahblah optional arguments: -h, --help show this help message and exit