HOWTO · Python

Programm in Python anhalten

Dieses Tutorial erklärt, wie man ein Programm in Python pausieren kann

Auf dieser Seite

Um ein Python-Programm anzuhalten, wählen Sie das gewünschte Verhalten: Verwenden Sie time.sleep() für eine zeitlich begrenzte Verzögerung, input() zum Warten auf eine Eingabe in der Konsole oder threading, wenn ein Thread warten soll, während ein anderer weiterarbeitet. Ein Shell-Pausebefehl ist nur in einer Windows-Konsole verfügbar und nicht portabel.

Mit time.sleep() eine feste Zeit warten

Importieren Sie das Modul time und rufen Sie time.sleep(seconds) auf, um den aufrufenden Thread für die angegebene Dauer in Sekunden anzuhalten. Danach wird die Ausführung mit der nächsten Anweisung fortgesetzt.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import time

print("Starting a short pause.")
time.sleep(0.1)
print("The program continues.")

Die angegebene Dauer ist keine präzise Zeitgarantie. Das Betriebssystem kann den Thread später als angefordert fortsetzen. Verwenden Sie time.sleep() daher für Verzögerungen, nicht für eine präzise Zeitplanung. Während ein Thread schläft, kann er selbst keine Arbeit ausführen; andere Threads können weiterlaufen.

Mit input() auf eine Benutzereingabe warten

Verwenden Sie input(), wenn ein Konsolenprogramm auf eine Person warten soll. Die Funktion zeigt optional eine Eingabeaufforderung an, liest eine Zeile ein und gibt den eingegebenen Text zurück. Wenn Sie den Rückgabewert nicht zuweisen, kann das sinnvoll sein, wenn jede Eingabe – etwa das Drücken der Eingabetaste – das Programm fortsetzen soll. Die folgenden Beispiele behandeln das Dateiende, damit sie auch ohne interaktive Konsole sauber beendet werden.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

try:
    input("Press Enter to continue: ")
except EOFError:
    pass

Wenn die Antwort wichtig ist, speichern Sie die zurückgegebene Zeichenfolge und verwenden Sie sie im Programm. Auch dieses Beispiel behandelt das Dateiende, das auftreten kann, wenn die Eingabe umgeleitet wird oder keine Konsoleneingabe verfügbar ist.

try:
    name = input("Your name: ")
except EOFError:
    name = "guest"

print(f"Hello, {name}.")

input() wartet auf eine Zeile Konsoleneingabe. Die Funktion eignet sich nicht dazu, einen Hintergrunddienst oder die Ereignisschleife einer grafischen Anwendung allgemein anzuhalten.

Eine wiederverwendbare Funktion für zeitlich begrenzte Pausen erstellen

Wenn Sie wiederholt Verzögerungen benötigen, kapseln Sie den Aufruf in eine kleine Hilfsfunktion. Importieren Sie time im selben Skript und übergeben Sie bei jedem Aufruf die gewünschte Dauer in Sekunden.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import time

def pause_for(seconds):
    time.sleep(seconds)

pause_for(0.1)
print("Ready.")

Mit dieser Hilfsfunktion bleiben die Aufrufstellen kurz; das Verhalten von time.sleep() bleibt dabei gleich: Angehalten wird jeweils der Thread, der die Funktion aufruft. Ergänzen Sie eine Validierung oder Protokollierung nur, wenn Ihr Programm solche Regeln benötigt.

Einen Thread anhalten, während andere Arbeit weiterläuft

Ein Aufruf von sleep innerhalb einer Worker-Funktion hält diesen Worker an, nicht alle Threads des Prozesses. Während der Verzögerung kann der Hauptthread andere Arbeit erledigen. Ein anschließender Aufruf von join() wartet, bis dieser Worker fertig ist; er hält weder den gesamten Prozess an noch stoppt er andere Threads.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import threading
import time

def worker():
    time.sleep(0.1)
    print("Worker finished.")

thread = threading.Thread(target=worker)
thread.start()
print("Main thread continues.")
thread.join()
print("Worker has been joined.")

Verwenden Sie die Thread-Koordination, wenn ein anderer Teil des Programms auf den Abschluss einer Arbeit warten muss. Für ein unbegrenztes Warten zur Koordination sollten Sie eine Synchronisationsprimitive wie ein Event verwenden, statt beliebig lange zu schlafen. Nach einem Aufruf von sleep wird erst nach der gewählten Verzögerung erneut geprüft.

os.system(“pause”) nur in einer Windows-Konsole verwenden

Unter Windows fordert os.system("pause") den Befehlsinterpreter auf, seinen Befehl pause auszuführen. Das setzt eine Windows-Konsole und eine externe Shell voraus. Daher eignet sich dieser Aufruf nicht als portable Python-Pause und verhält sich möglicherweise unerwartet, wenn keine Konsole angeschlossen ist. Verwenden Sie für eine Konsolenaufforderung bevorzugt input() und für die Koordination von Arbeit eine Synchronisationsprimitive aus threading. Dieser plattformspezifische Aufruf steht hier als Inline-Code, weil er nicht in jeder Umgebung ausgeführt werden kann.

Die passende Pausenmethode auswählen

  • Verwenden Sie time.sleep(seconds), wenn das Programm eine Verzögerung bekannter Dauer benötigt.
  • Verwenden Sie input(), wenn eine Person entscheiden soll, wann ein Konsolenprogramm fortgesetzt wird.
  • Verwenden Sie eine Synchronisation mit threading, wenn ein Thread auf einen anderen Thread oder ein Signal warten muss.
  • Verwenden Sie os.system("pause") nur in einem Skript für die Windows-Konsole, das ausdrücklich diesen Shell-Befehl benötigt.

Diese Ansätze halten unterschiedliche Dinge an: Eine zeitliche Verzögerung hält den aufrufenden Thread an, bei der Konsoleneingabe wird eine Zeile von einer Person erwartet, und die Synchronisation wartet auf einen anderen Teil eines nebenläufigen Programms. Entscheiden Sie danach, was die Ausführung fortsetzen soll und ob das Programm plattformübergreifend funktionieren muss.