Der Unterprozess gibt einen Exit-Code ungleich Null zurück: Wie kann der Unterprozessfehler von Python behoben werden?

王林
Freigeben: 2023-06-24 16:42:31
Original
2103 Leute haben es durchsucht

In Python ist der Unterprozess ein sehr nützliches Werkzeug, das es uns ermöglicht, andere Programme oder Befehle asynchron innerhalb des Programms auszuführen. Es kann jedoch ein Problem auftreten, das heißt, der untergeordnete Prozess gibt einen Exit-Code ungleich Null zurück, was bedeutet, dass bei der Ausführung des untergeordneten Prozesses ein Fehler vorliegt. In diesem Artikel wird dieses Problem erläutert und einige Lösungen bereitgestellt.

  1. Unterprozess und Exit-Code

Ein Unterprozess ist ein unabhängiger Prozess, der vom Hauptprozess erstellt wird und im Hintergrund ausgeführt wird. Der Hauptprozess kann mit dem untergeordneten Prozess interagieren, beispielsweise Befehle oder Daten an den untergeordneten Prozess senden und die Ausgabeergebnisse des untergeordneten Prozesses abrufen.

Der untergeordnete Prozess gibt nach Abschluss der Aufgabe einen Exit-Code zurück. Unter normalen Umständen sollte dieser Exit-Code Null sein, was darauf hinweist, dass der untergeordnete Prozess erfolgreich ausgeführt wurde. Wenn beim untergeordneten Prozess ein Fehler auftritt, wird ein Exit-Code ungleich Null zurückgegeben.

Bei der Verwendung von Unterprozessen in Python verwenden wir normalerweise das Unterprozessmodul von Python. Dieses Modul bietet verschiedene Methoden zum Erstellen von Unterprozessen und kann die Ausgabe und den Ausführungsstatus des Unterprozesses überwachen.

  1. Fehler in untergeordneten Prozessen behandeln

Bevor wir Fehler in untergeordneten Prozessen behandeln, müssen wir den Exit-Code und die Fehlermeldung kennen, die vom untergeordneten Prozess zurückgegeben werden. Dazu können wir dem Python-Code die folgende Zeile hinzufügen:

import subprocess

p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
output, error = p.communicate()

if p.returncode != 0:
    print("Error: Command failed with return code", p.returncode)
    print("Error message:", error.decode())
Nach dem Login kopieren

Im obigen Code verwenden wir die Methode subprocess.Popen, um den Unterprozess zu erstellen, und verwenden die Parameter stdout und stderr, um die Ausgabe- und Fehlerströme anzugeben. Wir verwenden den Shell-Parameter auch, um anzugeben, ob die Befehlszeichenfolge von der Shell interpretiert werden soll.

Wenn der untergeordnete Prozess abgeschlossen ist, verwenden wir die Kommunikationsmethode des Popen-Objekts, um die Ausgabe und Fehlermeldung abzurufen, und überprüfen das Returncode-Attribut des Popen-Objekts, um festzustellen, ob ein Fehler aufgetreten ist. Wenn ein Exit-Code ungleich Null zurückgegeben wird, hat der untergeordnete Prozess einen Fehler zurückgegeben und eine Fehlermeldung ausgegeben.

  1. Fehler bei untergeordneten Prozessen beheben

Es gibt mehrere Möglichkeiten, Fehler bei untergeordneten Prozessen zu beheben:

3.1 Überprüfen Sie den Befehl

Zuerst müssen wir überprüfen, ob der dem untergeordneten Prozess zugewiesene Befehl korrekt ist. Das mag offensichtlich sein, aber in komplexen Systemen können die Abhängigkeiten zwischen Befehlen komplex sein, sodass wir möglicherweise die Syntax und Parameter der Befehlszeichenfolge noch einmal überprüfen müssen.

3.2. Eingabe und Ausgabe überprüfen

Manchmal können von einem untergeordneten Prozess zurückgegebene Fehler durch falsche Eingabe- oder Ausgabeformate verursacht werden. Wenn Sie stdin verwenden, um Daten in einen Unterprozess einzugeben, stellen Sie sicher, dass die Eingabedaten das richtige Format haben und dass keine wichtigen Daten in der Ausgabe des Unterprozesses verloren gehen.

3.3. Umgang mit Fehlermeldungen

Obwohl das Unterprozessmodul von Python uns die vom Unterprozess zurückgegebenen Fehlermeldungen mitteilen kann, müssen wir diese Nachrichten möglicherweise weiter verarbeiten. Beispielsweise können wir Fehlermeldungen in einer Protokolldatei protokollieren, um sie später zu überprüfen.

3.4. Stellen Sie sicher, dass die Befehlsausführungsumgebung korrekt ist.

Der untergeordnete Prozess muss möglicherweise in bestimmten Umgebungsvariablen und Pfaden ausgeführt werden. Wenn Sie diese Umgebungsvariablen im Hauptprogramm ändern, müssen Sie sicherstellen, dass sie im untergeordneten Prozess richtig eingestellt sind, um eine korrekte Ausführung sicherzustellen.

3.5. Verwenden Sie die try-exclusive-Anweisung, um Ausnahmen zu behandeln.

Wenn Ihr Code bei der Verarbeitung des untergeordneten Prozesses auf eine Ausnahme stößt, können Sie die try-exclusive-Anweisung verwenden, um die Ausnahme abzufangen und die Fehlermeldung zu protokollieren. Zum Beispiel:

import subprocess

try:
    p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    output, error = p.communicate()

    if p.returncode != 0:
        raise subprocess.CalledProcessError(p.returncode, command, error)
except subprocess.CalledProcessError as e:
    print("Error: Command failed with return code", e.returncode)
    print("Error message:", e.output.decode())
Nach dem Login kopieren

Im obigen Code verwenden wir die Try-Exception-Anweisung, um Ausnahmen abzufangen, die beim Aufrufen des untergeordneten Prozesses auftreten. Wenn eine Ausnahme auftritt, lösen wir mit subprocess.CalledProcessError eine neue Ausnahme aus und übergeben ihr den Rückkehrcode und die Fehlermeldung.

  1. Zusammenfassung

Unterprozesse sind ein leistungsstarkes Werkzeug in Python-Programmen, aber Fehler können schwierig werden, wenn der Unterprozess einen Exit-Code ungleich Null zurückgibt. Um dieses Problem zu lösen, müssen wir den Befehl sowie die Eingabe und Ausgabe überprüfen, die korrekte Ausführungsumgebung sicherstellen und Fehlermeldungen behandeln. Bei Bedarf können wir auch Try-Exception-Anweisungen verwenden, um Ausnahmen abzufangen und Fehlermeldungen zu protokollieren.

Das obige ist der detaillierte Inhalt vonDer Unterprozess gibt einen Exit-Code ungleich Null zurück: Wie kann der Unterprozessfehler von Python behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!