Blog

Kommandozeilenanwendungen in Python

Dennis Vriend

Aktualisiert Oktober 21, 2025
4 Minuten

Python ist eine großartige Sprache für die Automatisierung. Ansible, SaltStack und Fabric sind Python-basiert. Die meisten DevOps-Tools bieten ein SDK für Python.
Cloud-Anbieter wie AWS, Google Cloud Platform (GCP) und
Azure bietet ein SDK für Python. Die Python-Standardbibliothek bietet
Funktionen, die die Automatisierung unterstützen. Python ist eine gute Alternative zu Bash. Python-Skripte können getestet und wiederverwendet werden.
Python-Skripte, die als CLI-Anwendung (Command Line Interface) verfügbar sind, ermöglichen DevOps. Es ist sehr einfach,
eine CLI in Python zu erstellen. Lassen Sie uns sehen, wie das funktioniert!

Eimer

Wir werden eine kleine Anwendung erstellen, die das AWS SDK für Python verwendet. Die Anwendung
ist auf Github verfügbar und heißt buckets. Wir werden schrittweise
Funktionen zu Buckets hinzufügen. Auf diese Weise lernen wir, wie man CLI-Anwendungen erstellt.

Hallo-Eimer

Python unterstützt die Erstellung von CLI-Anwendungen. Das Paket click ermöglicht es Python-Programmierern
, schöne CLI-Anwendungen zu erstellen. Die Verzweigung 01-hello-buckets
zeigt, was notwendig ist, um eine einfache CLI zu erstellen.

import click

@click.command()
def main():
    """Bucket, your interface to S3"""
    print("Hello, I am Buckets")

Die einfachste CLI-App enthält eine einzelne Funktion, die mit @click.command() dekoriert wurde. Die Annotation weist
click an, eine CLI-App zu erstellen. Wenn wir python buckets/buckets.py --help ausführen, wird das Folgende ausgegeben:

Usage: buckets.py [OPTIONS]

  Bucket, your interface to S3

Options:
  --help  Show this message and exit.

Und wenn wir die Anwendung python buckets/buckets.py ausführen, wird sie gedruckt:

Hello, I am Buckets

Paketieren, installieren und ausführen

Eine CLI-Anwendung sollte eigenständig laufen. Das Projekt 01-hello-buckets
enthält die Datei setup.py, die zum Verpacken der CLI-Anwendung verwendet wird.
Mit erstellen wir ein Installations-Binary. Mit installieren wir die Binärdatei. Wir können nun buckets oder buckets --help
um die CLI-Anwendung auszuführen. Buckets können jetzt in DevOps-Pipelines verwendet werden. Mit make uninstall deinstallieren wir Buckets.

AWS S3

AWS Simple Storage Service (S3) ist ein umfangreicher Speicherdienst. AWS bietet ein SDK namens boto3
für die Schnittstelle zu S3. Die Verzweigung 02-boto-buckets zeigt, wie Sie einen Befehl
erstellen, um alle S3-Buckets in Ihrem AWS-Konto anzuzeigen.

import click
import boto3

client = boto3.client('s3')

@click.command()
def main():
    """Bucket, your interface to S3"""
    rows = []
    rows.append(['BucketName', 'CreationDate'])
    for bucket in client.list_buckets()['Buckets']:
        rows.append([bucket['Name'], bucket['CreationDate'].__str__()])

    print(render_table(rows))

Nach make dist und make install ruft Buckets alle Buckets aus S3 ab und zeigt sie an:

BucketName                                       CreationDate
===============================================  =========================
                                   dennisvriend  2018-08-15 19:47:35+00:00
                               dennisvriend.com  2018-06-04 18:56:29+00:00

Mehrere Befehle

Der Zweig 03-multiple-commands zeigt, wie Sie mehrere Befehle erstellen können.
Buckets unterstützt jetzt ls, du und count als Befehle.

import click
import boto3

client = boto3.client('s3')

@click.group()
def main():
    """Bucket, your interface to S3"""

@main.command()
def ls():
    """Print all buckets"""
    rows = []
    rows.append(['BucketName', 'CreationDate'])
    for bucket in client.list_buckets()['Buckets']:
        rows.append([bucket['Name'], bucket['CreationDate'].__str__()])

    print(render_table(rows))

@main.command()
def du():
    """Print usage per bucket"""
    rows = []
    rows.append(['BucketName', 'CreationDate', 'Number of objects', 'Bytes'])
    for bucket in client.list_buckets()['Buckets']:
        num_objects, total_bytes = get_bucket_size(bucket['Name'])
        rows.append([bucket['Name'], bucket['CreationDate'].__str__(), num_objects, total_bytes])

    print(render_table(rows))

@main.command()
def count():
    """Count the number of buckets"""
    sum = 0
    for _ in client.list_buckets()['Buckets']:
        sum += 1
    print(f'{str(sum)} buckets')

Wenn wir python buckets/buckets.py --help ausführen, wird das Folgende gedruckt:

Usage: buckets.py [OPTIONS] COMMAND [ARGS]...

  Bucket, your interface to S3

Options:
  --help  Show this message and exit.

Commands:
  count  Count the number of buckets
  du     Print usage per bucket
  ls     Print all buckets

Wenn wir python buckets/buckets.py count aufrufen, wird der Befehl count ausgeführt. Die Methode main wurde dekoriert mit

@click.group(). Damit wird click angewiesen, eine CLI-App zu erstellen. Wir können mehrere Befehle hinzufügen, indem wir
mit anderen Methoden ausstatten. Beachten Sie, dass wir die anderen Methoden mit dem Namen versehen. Click fügt diese Befehle der

group main. Wenn Sie der Gruppe Befehle hinzufügen, können Sie mehrere Befehle hinzufügen und diese über die CLI ausführen.

Fazit

Es ist sehr einfach, CLI-Anwendungen in Python zu erstellen, indem Sie Funktionen dekorieren. Wir verwenden die für eine einfache CLI. Wir verwenden
und , um eine Methode - z.B. - zu dekorieren, die als Platzhalter für Befehle dient. Wir dekorieren dann andere Methoden mit z.B.

@main.command() um zu kennzeichnen, dass diese Methoden zur Gruppe main gehören. Auf diese Weise können wir der CLI-App mehrere Befehle hinzufügen.
Wir haben die Grundlagen der Erstellung von CLI-Apps mit Python behandelt. Click hat uns noch viel mehr zu bieten. Beim nächsten Mal werden wir die Buckets
um Parameter, Standardwerte, Flags und Umgebungsvariablen erweitern.

Verfasst von

Dennis Vriend

Contact

Let’s discuss how we can support your journey.