Welche Schnittstelle zu einem Dienstprogramm, das viele Parameter erfordert, wird empfohlen?

Welche Schnittstelle zu einem Dienstprogramm, das viele Parameter erfordert, wird empfohlen?

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 usernamejedoch 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 usernameund 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 getoptC)

  • 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:

  1. Berechnen Sie abhängige Argumente, aber lassen Sie deren Neudefinition zu: In Ihrem Beispiel haben Sie beispielsweise filenamedasselbe wie $(basename repository), Sie benötigen also möglicherweise nur ein Repository, haben aber die Möglichkeit --filename, einen alternativen Dateinamen anzugeben.
  2. Authentifizierung vor Befehlszeile und psAusgabe verbergen. Legen Sie sie in eine Datei: Vielleicht können Sie $HOME/.fm-git.confder Datei weitere Einschränkungen geben, z. B. chmod 600 $HOME/.fm-git.confund sie aus der Datei lesen. Manchmal ist es auch eine Option, Benutzernamen und Passwort aus Umgebungsvariablen abzurufen (z. B. ist der Standardbenutzername Ihr Systembenutzername oder SUDO_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.

verwandte Informationen