Python argparse - Gegenseitig exklusive Gruppe mit Standard, wenn kein Argument angegeben wird

8

Ich schreibe ein Python-Skript, um eine maschinenlesbare Datei zu verarbeiten und einen lesbaren Bericht über die darin enthaltenen Daten auszugeben.
Ich möchte die Möglichkeit geben, die Daten an stdout (-s) (standardmäßig) oder an eine txt (-t) oder csv (-c) Datei auszugeben. Ich würde gerne einen Schalter für das Standardverhalten haben, wie viele Befehle tun.

In Usage: möchte ich etwas wie script [-s | -c | -t] input file sehen und -s als Standard haben, wenn keine Argumente übergeben werden.

Ich habe derzeit (für die relevanten Argumente, in Kürze):

%Vor%

Wenn also keiner von -s , -t oder -c gesetzt ist, wird stdout (-s) auf True gesetzt, genau wie wenn -s übergeben wurde.

Gibt es einen besseren Weg, dies zu erreichen? Oder würde ein anderer Ansatz aus irgendeinem Grund allgemein als "besser" betrachtet werden?

Hinweis: Ich verwende Python 3.5.1 / 2 und mache mir keine Sorgen über die Kompatibilität mit anderen Versionen, da es derzeit nicht geplant ist, dieses Skript mit anderen zu teilen. Es ist einfach, mein Leben einfacher zu machen.

    
Alex B. 21.07.2016, 14:57
quelle

2 Antworten

12

Sie könnten jede Ihrer Aktionen die gleiche Variable aktualisieren lassen und stdout als Standardwert für diese Variable angeben.

Betrachten Sie dieses Programm:

%Vor%

Ihr Code könnte wie folgt aussehen:

%Vor%

Erste Alternative:

Anstatt willkürlich eines der .add_argument() s zu wählen, um den Standardtyp anzugeben, können Sie mit parser.set_defaults() den Standardtyp angeben.

%Vor%

Zweite Alternative:

Anstatt den Typ als Aufzählungswert anzugeben, können Sie eine aufrufbare Nachricht in den Typ speichern und dann die aufrufbare Funktion aufrufen:

%Vor%     
Robᵩ 21.07.2016, 15:18
quelle
0

Sie können mit sys.argv:

"schummeln" %Vor%     
pwnsauce 21.07.2016 15:33
quelle

Tags und Links