2013-02-19 3 views
8

Ho un determinato file di configurazione che chiama i suoi plugin. È possibile passare argomenti a questi plugin. Questo file di configurazione consente anche di chiamare comandi arbitary in fase di esecuzione.Sovrascrittura comportamento predefinito argparse -h

I plug-in utilizzano molti argomenti: uno di questi è -h e non corrisponde a --help. Ora, il mio problema è che voglio chiamare il mio script Python e passare alcuni argomenti. Sto usando argparse e volendo essere coerente con il resto della configurazione, ho creato un flag -h. Con mia sorpresa, argparse mi dà solo il argparse.ArgumentError: argument -h/--help: conflicting option string(s): -h invece di badare ai fatti suoi.

C'è un modo per impedire che ciò accada?

Sono ben consapevole che la maggior parte delle persone si aspetta che -h dia aiuto, ma è la mia sceneggiatura e penso di sapere meglio di cosa voglio usare un flag rispetto agli sviluppatori di argparse.

+0

In effetti sai meglio degli sviluppatori argparse, che è proprio il motivo per cui devi dire cosa intendi e non fidarti solo di indovinare la tua mente correttamente. L'impostazione predefinita '-h --help' ha senso perché è così comune. Dicendoti quando hai introdotto per sbaglio uno scontro con l'aspettativa di default comune è una buona cosa. Tutto quello che devi fare è dire ad argparse che hai intenzione di farlo e tutto va bene! – Ben

risposta

11

Guardate nel argparse documentation per gli argomenti ArgumentParser. Ce n'è uno chiamato add_help, che ha come valore predefinito True.

parser = argparse.ArgumentParser('Cool', add_help=False) 
parser.add_argument('-h', '--hi', action='store_true', dest='hi') 

Funziona come previsto.

+2

Dannazione, volevo mantenere '--help', ma non' -h-' – ThorSummoner

+8

@ThorSummoner,' parser.add_argument ('- help', action = 'help', help = 'mostra questo messaggio di aiuto ed esce ') 'in aggiunta a' add_help = False'. –

5

C'è un kwarg per sopprimere quella roba (docs).
Crea il tuo parser in questo modo:

parser = argparse.ArgumentParser(prog='PROG', add_help=False) 
+0

Grazie mille! Segnerò l'altra risposta come quella in alto per prima e praticamente identica. Devo averlo perso nei documenti ... –

+3

In realtà, il mio era il primo, ma non importa: P – wim

+0

Oh, potresti avere ragione. Scuse più profonde - lunga notte. –