2012-01-24 2 views
6

Come è possibile disabilitare la stampa delle scelte di sottocomando, quelle tra parentesi graffe? Utilizzando un esempio a http://docs.python.org/dev/library/argparse.html#sub-commands, l'uscita normale è:Nel modulo argparse di python, come posso disabilitare la stampa delle scelte di sottocomando tra parentesi graffe?

usage: [-h] {foo,bar} ... 

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

subcommands: 
{foo,bar} additional help 

Quello che voglio è quello di stampare questa:

usage: [-h] {foo,bar} ... 

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

subcommands: 

Rimozione solo l'ultima riga.

risposta

0

Sostituisci ArgumentParser.print_usage() con il tuo metodo per stampare qualsiasi cosa, comunque tu voglia. Se tutto ciò che si vuole fare è eliminare l'ultima riga, chiamare la versione originale, acquisire i risultati (inviandoli a un file) e stampare solo le parti che si desidera.

6

Per evitare di inviare spam ai miei utenti con l'enorme elenco brutto di parentesi graffe di dozzine di sottocomandi, ho semplicemente impostato l'attributo metavar dell'oggetto sottocomando. Il mio codice è simile:

import argparse 
parser = argparse.ArgumentParser(description='Stack Overflow example') 
subs = parser.add_subparsers() 
subs.metavar = 'subcommand' 
sub = subs.add_parser('one', help='does something once') 
sub = subs.add_parser('two', help='does something twice') 
parser.parse_args() 

E l'uscita di correre questo script con un singolo -h argomento è:

Il risultato non è esattamente quello che illustrare come la vostra migliore dei casi lo si desidera, ma penso che potrebbe essere il più vicino possibile senza sottoclasse argparse.ArgumentParser e ignorare le cose che è necessario regolare, il che sarebbe un lavoro disordinato.