Ich erstelle ein Befehlszeilenprogramm, das sechs Informationen benötigt, um ordnungsgemäß zu funktionieren. Es sieht folgendermaßen aus:
fm-git filename repository path comment username password
Auf jedem einzelnen System ist es username
jedoch konstant.password
Beim Ausführen des Dienstprogramms fällt es mir schwer, es zu erstellen. Hier ist beispielsweise ein Testaufruf des Dienstprogramms (zur besseren Lesbarkeit in mehrere Zeilen unterteilt):
/Users/chuck/Projects/fm-git/fm-git.py chiv-lib
/Users/chuck/Projects/chiv-lib/ Chivalry/ "continued testing"
Administrator abc1234
Ich überlege, wie ich diese Argumente auf unterschiedliche Weise übergeben kann. Zum Beispiel fm-git -f filename -r repository ...
oder fm-git --filename filename --repository repository...
. Ich überlege auch, die Konfigurationseinstellungen für die Argumente username
und vorzunehmen password
, da sie sich im Allgemeinen nicht ändern und dann aus dem Dienstprogrammaufruf entfernt werden könnten.
Wenn viele, aber erforderliche Dienstprogrammargumente vorhanden sind, was ist die gängige Vorgehensweise zum Aufrechterhalten der Lesbarkeit von Dienstprogrammaufrufen?
Antwort1
Normalerweise erlauben Unix-Anwendungen mehrere Möglichkeiten, diese Informationen bereitzustellen, wobei die „spezifischeren“ Möglichkeiten die weniger spezifischen überschreiben.
Also hast du:
Bei grafischen Anwendungen bietet das verwendete Toolkit fast immer eine Möglichkeit, auf Ressourcen zuzugreifen (z. B.
xrdb
-style in einfachem X usw.).eine Konfigurationsdatei, falls das Toolkit nicht bereits eine bereitstellt.
Kommandozeilenoptionen, sowohl Kurzform als auch Langform (einfach mit
getopt
C)sinnvolle Vorgabewerte, wenn keine Informationen angegeben sind, z.B. das aktuelle Verzeichnis für einen Pfad
Positionsparameter sind nur bei wenigen obligatorischen Parametern sinnvoll, denen möglicherweise eine Liste von Dateien folgt (da sich Wildcard-Angaben zu mehreren Parametern erweitern). Sechs einzelne Teile sind zu viel; die Reihenfolge ist schwer zu merken, verwenden Sie daher Optionen.
Bei Passwörtern kann es hilfreich sein, eine Möglichkeit bereitzustellen, dass die Anwendung das Passwort von stdin liest, möglicherweise durch Verwendung eines speziellen Werts (z. B. --password -
oder -p -
).
Der Benutzer der Anwendung kann wählen, ob fest codierte Passwörter, Passwörter in Konfigurationsdateien oder die Möglichkeit zur Passworteingabe durch den Benutzer für den jeweiligen Anwendungsfall die beste Option ist.
Antwort2
Im Allgemeinen ist es eine gute Idee:
- Berechnen Sie abhängige Argumente, aber lassen Sie deren Neudefinition zu: In Ihrem Beispiel haben Sie beispielsweise
filename
dasselbe wie$(basename repository)
, Sie benötigen also möglicherweise nur ein Repository, haben aber die Möglichkeit--filename
, einen alternativen Dateinamen anzugeben. - Authentifizierung vor Befehlszeile und
ps
Ausgabe verbergen. Legen Sie sie in eine Datei: Vielleicht können Sie$HOME/.fm-git.conf
der Datei weitere Einschränkungen geben, z. B.chmod 600 $HOME/.fm-git.conf
und sie aus der Datei lesen. Manchmal ist es auch eine Option, Benutzernamen und Passwort aus Umgebungsvariablen abzurufen (z. B. ist der Standardbenutzername Ihr Systembenutzername oderSUDO_USER
), aber das ist möglicherweise nicht Ihr Fall.
Nach diesen beiden Optimierungen haben Sie also nur noch 3 CLI-Parameter, was meiner Meinung nach akzeptabel ist. Sie können sie entweder als Positionsparameter verwenden oder einige Flags bereitstellen, wie --comment
: Die Bereitstellung langer Flags verbessert die Lesbarkeit, wenn Sie Ihr Programm weiter in Skripten verwenden, erfordert jedoch mehr Tipparbeit, wenn Sie Ihr Programm größtenteils manuell über die CLI ausführen.
Wie auch immer, wenn Sie Ihr Programm in Python schreiben, empfehle ich Ihnen,Argparse-Modul– es hilft Ihnen beim Analysieren von Parametern und beim künftigen Vornehmen von Änderungen, wenn Sie diese ändern möchten.