2013-02-19 13 views
8

Ich habe eine bestimmte Konfigurationsdatei, die auf ihre Plugins aufruft. Es ist möglich Argumente an diese Plugins zu übergeben. Diese Konfigurationsdatei erlaubt mir auch, zur Laufzeit willkürliche Befehle aufzurufen. Die Plugins verwenden viele Argumente: Einer davon ist -h und nicht --help. Mein Problem ist nun, dass ich mein eigenes Python-Skript aufrufen und einige Argumente übergeben möchte. Ich benutze argparse und wollte mit dem Rest der Config konsistent sein, ich habe eine -h Flag erstellt. Zu meiner Überraschung, Argparse gibt mir nur argparse.ArgumentError: argument -h/--help: conflicting option string(s): -h statt sich selbst zu kümmern.Überschreiben von Default-Argparse -h Verhalten

Gibt es eine Möglichkeit, dies zu verhindern?

Ich bin mir bewusst, dass die meisten Leute erwarten, -h Hilfe zu geben, aber es ist mein eigenes Skript und ich denke, ich weiß besser, wofür ich eine Flagge als die Argarse Devs verwenden möchte.

+0

Sie wissen in der Tat besser als die argparse Entwickler, was genau das ist, warum Sie sagen müssen, was Sie meinen und nicht nur vertrauen, dass sie Ihren Verstand richtig erraten. Der Standard '-h --help' ist sinnvoll, weil er so gebräuchlich ist. Es ist eine gute Sache, Ihnen zu sagen, wenn Sie versehentlich einen Konflikt mit der üblichen Standarderwartung eingeführt haben. Alles, was Sie tun müssen, ist argparse sagen, dass Sie das vorhatten und alles ist gut! – Ben

Antwort

11

Blick in den argparse documentation für die ArgumentParser Argumente. Es gibt eine namens add_help, die standardmäßig auf True gesetzt ist.

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

Dies funktioniert wie erwartet.

+2

Darn, ich wollte '--help' behalten, aber nicht' -h-' – ThorSummoner

+8

@ThorSummoner,' parser.add_argument ('- help', action = 'help', help = 'diese Hilfe anzeigen und beenden ') 'zusätzlich zu' add_help = False'. –

5

Es gibt ein Kwarg, um dieses Zeug zu unterdrücken (docs).
Erstellen Sie Ihren Parser wie folgt aus:

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

Vielen Dank! Ich werde die andere Antwort als die erste markieren, wie es zuerst war und ist ziemlich identisch. Ich muss es in der Dokumentation verpasst haben ... –

+3

Eigentlich war meins zuerst, aber vergiss: P – wim

+0

Oh, Sie könnten tatsächlich Recht haben. Tiefste Entschuldigungen - lange Nacht. –

Verwandte Themen