Aus LinuxUser 02/2018

Mit Docopt Optionen für die Kommandozeile auswerten (Seite 2)

Listing 2

"""Usage:
  ./helloworld.py
  ./helloworld.py [--help | -h]
  ./helloworld.py [--verbose | -v]
 Options:
  --help -h     display help information
  --verbose -v  increase the verbosity of output
"""

Doch es gibt zwei Stolperfallen, eine davon beim Auswerten der Parameter im Programm. Existiert für eine lange Option zusätzlich eine kurze Version, schreiben Sie nur eine Abfrage für die lange Version – Docopt wertet die kurze Variante dann automatisch mit aus. Eine zusätzliche Abfrage für den kurzen Parameter löst bislang eine Fehlermeldung aus.

Die zweite Falle besteht bei der Angabe der Optionen im Docstring. Geben Sie zuerst die lange Version an und danach die kurze, trennen Sie beide Werte mit einem Leerzeichen. Gehen Sie umgekehrt vor, müssen Sie beide Werte stattdessen mit einem Komma trennen (Listing 3).

Listing 3

Options:
 -h, --help    display help information
 --verbose -v  increase the verbosity of output

Es empfiehlt sich, im Docstring mindestens zwei Leerzeichen zwischen die Option und den Beschreibungstext zu setzen. Damit signalisieren Sie dem Parser, dass keine weitere Option folgt, sondern eine Erläuterung (Listing 4).

Listing 4

Options:
 --left -l  nach links  # gut
 --right -r nach rechts # schlecht

Positional Arguments kennzeichnen Sie in Form von Worten in Kleinbuchstaben, die Sie mit spitzen Klammern einschließen (Listing 5). Docopt akzeptiert das Wort aber selbst dann, wenn Sie es vollständig in Großbuchstaben schreiben.

Listing 5

"""Usage:
  ping <host> PORT
"""

Optionen

Kurze Optionen dürfen Sie zusammenziehen, dass heißt, die drei Optionen -a -b -c dürfen Sie als -abc schreiben. Lange Optionen erlauben zusätzliche Werte nach einem Gleichheitszeichen, etwa target=/dev/sdb1. Kurze Optionen erlauben zusätzliche Werte sowohl mit als auch ohne Leerzeichen, also gleichermaßen als -t/dev/sdb1 und -t /dev/sdb1.

Listing 6 zeigt Ihnen ein Beispiel aus dem Alltag, das das Kommando ls funktional nachempfindet. Es gibt die Namen aller Einträge im aktuellen Verzeichnis aus. Mittels -f oder --files liefert es nur Dateien, mittels -d oder --dirs nur Verzeichnisse.

Listing 6

#!/usr/bin/python
"""Usage:
  ./fileinfo.py
  ./fileinfo.py [--help | -h]
  ./fileinfo.py [--verbose | -v]
  ./fileinfo.py [--files | -f]
  ./fileinfo.py [--dirs | -d]
 Options:
  --help -h     display help information
  --verbose -v  increase the verbosity of output
  --files -f    display files only
  --dirs -d     display directories only
"""
# include docopt module
from docopt import docopt
# import other modules
import os
if __name__ == '__main__':
  arguments = docopt(__doc__)
  # define which information to show
  showFiles = True
  showDirectories = True
  path = "."
  selection = "*"
  verbose = False
  if arguments["--verbose"]:
    print("enabling verbose output ")
    verbose = True
  if arguments["--files"]:
    showDirectories = False
  if arguments["--dirs"]:
    showFiles = False
  # define display path
  displayPath = path
  for root, dirs, files in os.walk(displayPath):
    if showFiles:
      for filename in files:
        print(filename)
    if showDirectories:
      for dirname in dirs:
        print(dirname)

Das Programm unterscheidet bei der Ausgabe mittels der beiden Variablen showFiles und showDirectories, die es in Abhängigkeit von den auf der Kommandozeile angegebenen Optionen auf True oder False setzt. In der For-Schleife wertet es diese beiden Variablen aus und liefert damit entweder nur Dateien oder Verzeichnisse zurück oder beides.

Alles, was nicht in das bisherige Schema der Parameter passt, behandelt Docopt als Unterkommando. Diese Form kommt etwa beim Verwalten von Paketen via Apt zum Einsatz in Form von apt-get install Paket.

Notwendige Parameter

Neben den eckigen und spitzen Klammern haben auch runde Klammern in Docopt eine Bedeutung: Darin stehen notwendige Parameter. Nützlich ist das unter anderem für Schnittstellen, in denen das Programm einen von mehreren Parametern benötigt. Listing 7 zeigt den Docstring für eine minimale Variante des Paketverwalters apt-get. Dabei tauchen hinter der Angabe von <package> drei Punkte auf. Diese geben an, dass der Parameter mehrfach vorkommen darf; im konkreten Beispiel dürfen Sie also mehr als ein Paket angeben.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
KAUFEN
LinuxUser 02/2018 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: