2012-11-16 12 views
8

Programımdaki komut satırı alt komutları için Python argparse modülünü kullanıyorum. Benim kod temelde şöyle görünür:Argparse subparser: komut listesinde metavar'ı gizle

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

"piton test.py --help" çalışan ben mevcut alt komutları listelemek istiyorum.

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

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

subcommands: 
    <command> 
    this  do this 
    that  do that 

ben bir şekilde listeleyen alt komutlarda <command> hattını kaldırmak ve hala kullanım hattında tutmak Can: Şu anda bu çıktıyı almak? Ben add_subparsers argüman olarak help = argparse.SUPPRESS vermeyi denedim, ancak bu sadece yardım çıktı tüm alt komutları gizler.

+0

Ne 'None' için' metavar' ayarı (veya kapalı bırakarak) hakkında? - Veya 'metavar =' ''ayarlanıyor ... – mgilson

+0

Yanıtladığınız için teşekkürler! Bunu None olarak ayarlarsam, bunun yerine tüm komutların bir listesini alırım ve eğer 'metavar =' 'kullanırsam boş bir satır alırım. Her iki durumda da kullanım hattındaki metavarı kaybederim. –

+0

Oh, şimdi aradığın şeyi aldım. Ne yazık ki bunu nasıl yapacağımı bilmiyorum. – mgilson

cevap

10

Bir PARSER eylemi biçimlendirme eğer sadece çizgiyi kaldırır yeni HelpFormatter ekleyerek çözmüş:

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

Harika bir çözüm. Basit bir şekilde tahriş edici bir problemi çözmek için +1. – Christopher

+0

Yöntem için teşekkürler. Eklendiğinde beklendiği gibi çalışıyor: "argparse.ArgumentParser (formatter_class = SubcommandHelpFormatter)" –