Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Unterprozessaufrufen in Python eine Zeitüberschreitung hinzufügen?

Wie kann ich Unterprozessaufrufen in Python eine Zeitüberschreitung hinzufügen?

DDD
DDDOriginal
2024-12-14 02:33:09181Durchsuche

How Can I Add a Timeout to Subprocess Calls in Python?

Verwendung eines Subprozessmoduls mit Timeout-Funktionalität

Die Notwendigkeit, dass ein Subprozess seine Ausführung innerhalb eines vordefinierten Zeitrahmens abschließen muss, entsteht häufig in der Programmierung. Während das Unterprozessmodul einen robusten Mechanismus zum Ausführen von Befehlen bietet, fehlen ihm von Natur aus Timeout-Funktionen.

Um diese Einschränkung zu beheben, stellt Python 3.3 und höher die Funktion check_output innerhalb des Unterprozessmoduls bereit. Diese Funktion ruft nicht nur die Standarddaten vom Befehl ab, sondern löst auch eine Ausnahme aus, wenn der Prozess das angegebene Timeout überschreitet.

from subprocess import STDOUT, check_output

# Set the timeout in seconds
timeout = 5

try:
    # Execute the command with the specified timeout
    output = check_output(cmd, stderr=STDOUT, timeout=timeout)
except CalledProcessError as e:
    # Handle the error if the process fails with a non-zero exit status
    pass

# Process the merged stdout/stderr data contained in the output variable

In diesem Code bestimmt die Timeout-Variable die maximal zulässige Ausführungszeit für den Befehl. check_output stellt sicher, dass der Prozess beendet wird und die kombinierte stdout/stderr-Ausgabe innerhalb des angegebenen Zeitrahmens zurückgibt.

Alternativ bietet für Python 2.x-Benutzer der Subprocess32-Backport des Subprocess-Moduls die gleiche Funktionalität. Dieser Backport bietet eine Lösung, die check_output entspricht und eine zeitüberschreitungsbewusste Befehlsausführung unter Python 2.x ermöglicht.

Das obige ist der detaillierte Inhalt vonWie kann ich Unterprozessaufrufen in Python eine Zeitüberschreitung hinzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn