Sto scrivendo uno script python che prende due argomenti, e alcune opzioni di aiuto simile:Python argparse opzione
scriptname [-h] [-l] [-q|-d] arg1 arg2
Il -q
(silenzioso) e -d
(debug) opzioni di cambiare il livello di dettaglio e la -h
opzione è l'opzione di aiuto creata automaticamente da argparse.
Vorrei la possibilità -l
(elenco) per comportarsi in modo simile all'opzione -h
in quanto sarà non richiede che gli argomenti (altrimenti obbligatorie) sono presenti ed elencare alcune informazioni utili (diversa dall'opzione -h
). In pratica, questo significa che lo script potrebbe essere chiamato nei seguenti tre modi:
scriptmane [-q|-d] arg1 arg2
scriptname -l
scriptname -h
Due possibili modi di procedere sarebbe quello di: ('?' Con nargs =)
- Fare gli argomenti opzionali e aggiungere il codice per verificare che ci siano due argomenti in tutti i casi in cui non sono fornite le opzioni
-l
o-h
. - Scrive una classe azione personalizzata (non sono sicuro dei dettagli).
Ma spero che ci sia un modo più semplice per ereditare il comportamento "questa opzione è tutto ciò che serve" dall'opzione di aiuto.
Solution (in base alla risposta del samwyse):
Sulla base del _HelpAction()
in argparse.py:
class _ListAction(argparse.Action):
def __init__(self,
option_strings,
dest=argparse.SUPPRESS,
default=argparse.SUPPRESS,
help=None):
super(_ListAction, self).__init__(
option_strings=option_strings,
dest=dest,
default=default,
nargs=0,
help=help)
def __call__(self, parser, namespace, values, option_string=None):
print_list()
parser.exit()
e poi, durante l'installazione parser:
parser.add_argument('-l', '--list', action=_ListAction,
help="List all available cases")
Esattamente quello che stavo pensando, ma essendo sul mio smartphone è stato difficile per me programmare. :) – samwyse