Pexpect – Terminal-Automatisierung mit Python

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung

Die Automatisierung der Interaktion mit der Kommandozeile ist eine zentrale Herausforderung in der modernen Softwareentwicklung und Systemadministration. Ob bei der Verwaltung entfernter Server oder dem umfassenden Testen von CLI-Schnittstellen – die Notwendigkeit, interaktive Prozesse programmgesteuert zu kontrollieren, tritt ständig auf. Standard-Python-Werkzeuge wie subprocess stoßen schnell an ihre Grenzen, wenn Anwendungen interaktive Eingaben erfordern, auf spezifische Eingabeaufforderungen warten oder eine komplexe Logik zur Auswertung der Ausgabe benötigen.

Pexpect (Python Expect) ist eine leistungsstarke Bibliothek zur Automatisierung interaktiver Kommandozeilenanwendungen, die auf dem Konzept des klassischen Expect-Tools basiert. Sie bietet einen robusten Mechanismus zum Starten von Kindprozessen, zum Überwachen ihrer Ausgabe, zum Reagieren auf bestimmte Textmuster und zum programmgesteuerten Senden von Befehlen – und imitiert dabei effektiv das Verhalten eines menschlichen Benutzers.

Was ist die Pexpect-Bibliothek?

Geschichte und Konzept

Pexpect ist eine Python-Implementierung des Konzepts, das ursprünglich in der Sprache Tcl mit dem von Don Libes im Jahr 1990 entwickelten Expect-Tool verwirklicht wurde. Die Kernidee besteht darin, eine "intelligente" Schnittstelle für die Interaktion mit interaktiven Programmen über ein Pseudo-Terminal (pty) zu schaffen.

Architektur und Funktionsprinzipien

Die Bibliothek arbeitet nach den folgenden Schlüsselprinzipien:

Pseudo-Terminal (PTY): Pexpect erzeugt ein Pseudo-Terminal, das für den Kindprozess ein echtes Terminal emuliert. Dadurch verhalten sich die Programme so, als würden sie mit einem echten Benutzer interagieren.

Pufferung und Parsing: Alle vom Kindprozess eingehenden Daten werden gepuffert und auf Übereinstimmung mit vorgegebenen Mustern analysiert.

Ereignismodell: Die Bibliothek arbeitet nach einem ereignisgesteuerten Modell, bei dem Ereignisse ausgelöst werden, sobald erwartete Muster in der Programmausgabe erkannt werden.

Wichtige Funktionen

  • Starten und Steuern interaktiver Prozesse
  • Unterstützung regulärer Ausdrücke für den Mustervergleich
  • Flexibles Timeout-System
  • Erweiterte Protokollierungsmöglichkeiten
  • Verarbeitung verschiedener Zeichenkodierungen
  • Integration mit asynchronen Operationen

Installation und Einrichtung

Systemvoraussetzungen

Pexpect benötigt ein POSIX-kompatibles System (Linux, macOS, Unix). Die Bibliothek wird unter Windows nicht nativ unterstützt, kann aber über WSL (Windows Subsystem for Linux) verwendet werden.

Installationsprozess

pip install pexpect

Für die Installation mit zusätzlichen Abhängigkeiten:

pip install pexpect[async]

Import und Basiskonfiguration

import pexpect
import sys
import signal

Grundlagen der Arbeit mit Pexpect

Prozesse erstellen und verwalten

Die Klasse spawn – das Herzstück der Bibliothek

Die Klasse spawn ist das zentrale Element von Pexpect und bietet eine Schnittstelle zum Erstellen und Verwalten von Kindprozessen:

child = pexpect.spawn('ssh user@hostname', encoding='utf-8', timeout=30)

Wichtige Konstruktorparameter:

  • command: Der auszuführende Befehl
  • args: Eine Liste von Befehlsargumenten
  • timeout: Globales Timeout in Sekunden
  • encoding: Zeichenkodierung für die String-Verarbeitung
  • logfile: Datei oder Stream für die Protokollierung
  • echo: Ein-/Ausschalten des Echos
  • preexec_fn: Funktion, die vor dem Start des Prozesses ausgeführt wird

Warte- und Vergleichsmuster

Die Methode expect() und ihre Varianten

Die Methode expect() ist das wichtigste Werkzeug, um auf bestimmte

Empfehlungen