2012-11-16 15 views
8

मैं अपने प्रोग्राम में कमांड लाइन सबकॉमैंड्स के लिए पाइथन Argparse मॉड्यूल का उपयोग कर रहा हूं। मेरे कोड मूल रूप से इस तरह दिखता है:Argparse subparser: कमांड सूची में मेटावर छुपाएं

import argparse 

parser = argparse.ArgumentParser() 
subparsers = parser.add_subparsers(title="subcommands", metavar="<command>") 

subparser = subparsers.add_parser("this", help="do this") 
subparser = subparsers.add_parser("that", help="do that") 

parser.parse_args() 

जब चल रहा है "अजगर test.py --help" मैं उपलब्ध subcommands सूची करना चाहते हैं।

usage: test.py [-h] <command> ... 

optional arguments: 
    -h, --help show this help message and exit 

subcommands: 
    <command> 
    this  do this 
    that  do that 

मैं किसी भी तरह लिस्टिंग subcommands में <command> लाइन को हटाने और अभी भी उपयोग लाइन में रखने के सकता है: वर्तमान में मैं इस आउटपुट प्राप्त? मैंने help_ argparse.SUPPRESS को add_subparsers के तर्क के रूप में देने का प्रयास किया है, लेकिन यह केवल सहायता आउटपुट में सभी उप-सामग्रियों को छुपाता है।

+0

'None' को' metavar' (या इसे बंद कर छोड़कर) के बारे में क्या? - या 'मेटावर =' '' सेट करें ... – mgilson

+0

उत्तर देने के लिए धन्यवाद! यदि मैं इसे किसी भी पर सेट करता हूं तो मुझे इसके बजाय सभी आदेशों की एक सूची मिलती है और यदि मैं 'मेटावर =' 'का उपयोग करता हूं, तो मुझे खाली रेखा मिलती है। दोनों मामलों में मैं उपयोग लाइन में मेटावर खो देता हूं। –

+0

ओह, मुझे वह मिल गया जो आप अभी खोज रहे हैं। दुर्भाग्य से मुझे नहीं पता कि इसे कैसे किया जाए। – mgilson

उत्तर

10

मैं एक नया HelpFormatter कि सिर्फ अगर एक पार्सर कार्रवाई स्वरूपण लाइन को हटा जोड़कर इसे हल:

class SubcommandHelpFormatter(argparse.RawDescriptionHelpFormatter): 
    def _format_action(self, action): 
     parts = super(argparse.RawDescriptionHelpFormatter, self)._format_action(action) 
     if action.nargs == argparse.PARSER: 
      parts = "\n".join(parts.split("\n")[1:]) 
     return parts 
+0

बहुत बढ़िया समाधान। एक आसान तरीके से एक परेशान समस्या को हल करने के लिए +1। – Christopher

+0

विधि के लिए धन्यवाद। अपेक्षित कार्य करता है जब इसमें जोड़ा गया: 'argparse.ArgumentParser (formatter_class = SubcommandHelpFormatter) ' –

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