Pythons Unterprozessmodul und Timeouts
Das Unterprozessmodul bietet eine bequeme Möglichkeit, externe Befehle auszuführen, ihre Ausgaben zu erfassen und ihre Lebenszyklen zu verwalten. Standardmäßig unterstützt die Methode „communic()“ jedoch keine Zeitüberschreitungen. Dies stellt eine Herausforderung dar, wenn Befehle mit langer Laufzeit ausgeführt werden, die möglicherweise den aufrufenden Prozess blockieren könnten.
Timeouts mit check_output implementieren
Python 3.3 und höher stellt check_output() als bereit effizientere Alternative zu Popen() und communications(). Diese Funktion wertet einen Befehl aus, führt seine stdout- und stderr-Ausgaben in einer Bytezeichenfolge zusammen und löst einen CalledProcessError aus, wenn der Befehl mit einem Status ungleich Null beendet wird. Entscheidend ist, dass es auch Timeouts unterstützt, sodass Sie eine maximale Ausführungszeit für den Befehl angeben können.
from subprocess import STDOUT, check_output seconds = 10 # Timeout in seconds output = check_output(cmd, stderr=STDOUT, timeout=seconds)
In diesem Beispiel führt die Funktion check_output() den in cmd angegebenen Befehl aus und wartet, bis er abgeschlossen ist innerhalb von 10 Sekunden. Wenn der Befehl länger als 10 Sekunden dauert, wird ein TimeoutExpired-Fehler ausgelöst.
Verwendung von subprocess32 für Timeouts in Python 2.x
Für Python 2.x gilt: subprocess32 backport bietet die gleiche Timeout-Funktionalität wie check_output() in Python 3.3. Um subprocess32 zu installieren, verwenden Sie pip:
pip install subprocess32
Nach der Installation können Sie die call()-Funktion von subprocess32 verwenden, um Befehle mit Zeitüberschreitungen auszuführen:
import subprocess32 seconds = 10 # Timeout in seconds subprocess32.call(cmd, timeout=seconds)
Zusätzliche Überlegungen
Das obige ist der detaillierte Inhalt vonWie kann ich Timeouts implementieren, wenn ich das „subprocess'-Modul von Python verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!