Frage

Ich habe eine SMS-Nachricht: script xyz.py returned exit code 0. Was bedeutet das?

Was bedeutet der Exit-Codes in Python? Wie viele sind es? Welche sind wichtig?

War es hilfreich?

Lösung

Was Sie suchen in dem Skript ist, um Anrufe an sys.exit() . Das Argument dieser Methode ist für die Umwelt als Exit-Code zurückgegeben.

Es ist ziemlich wahrscheinlich, dass das Skript nie die Exit-Methode ruft, und das 0 ist der Standard-Exit-Code.

Andere Tipps

in der Dokumentation zu sys.exit :

  

Das optionale Argument arg kann ein   integer den Exit-Status geben   (Verzug auf Null) oder eine andere Art   des Objekts. Wenn es sich um eine ganze Zahl, Null   wird als „erfolgreiche Beendigung“ betrachtet   und jeder Nicht-Null-Wert wird als   „Abnormal termination“ durch Muscheln und   dergleichen. Die meisten Systeme erfordern es   sein, im Bereich 0-127, und produzieren   undefined Ergebnisse anders. Etwas   Systeme haben eine Konvention für   Zuweisen spezifische Bedeutungen   spezifischer Exit-Codes, aber diese sind   im allgemeinen unterentwickelt; Unix   Programme 2 in der Regel für Befehl   Linie Syntaxfehler und 1 für alle anderen   Art von Fehlern.

Ein Beispiel, bei dem Exit-Codes verwendet werden, in Shell-Skripten sind. In bash können Sie die spezielle Variable $? für den letzten Exit-Status prüfen:

me@mini:~$ python -c ""; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(0)"; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(43)"; echo $?
43

Persönlich versuche ich, den Exit-Codes zu verwenden, die ich in /usr/include/asm-generic/errno.h finde (auf einem Linux-System), aber ich weiß nicht, ob dies das Richtige zu tun ist.

Es gibt einen errno Modul, die Standard-Exit-Codes definiert:

Zum Beispiel: Zugriff verweigert ist Fehlercode 13 :

import errno, sys

if can_access_resource():
    do_something()
else:
    sys.exit(errno.EACCES)

Für die Aufzeichnung können Sie POSIX-Standard Exit-Codes definiert hier .

Beispiel:

import sys, os

try:
    config()
except:
    sys.exit(os.EX_CONFIG) 
try:
    do_stuff()
except:
    sys.exit(os.EX_SOFTWARE)
sys.exit(os.EX_OK) # code 0, all ok

Beenden Codes von 0 in der Regel bedeuten, „nichts falsch hier.“ Allerdings, wenn der Programmierer des Skripts nicht Konvention folgen haben können Sie die Quelle konsultieren, um zu sehen, was es bedeutet. Normalerweise wird ein Nicht-Null-Wert wird als Fehlercode zurückgegeben.

Betriebssystembefehle haben Exit-Codes. Geben Sie für linux Exit-Codes etwas Material auf, das zu sehen. Die Shell verwendet den Exit-Codes, um zu entscheiden, ob das Programm arbeitete, hatte Probleme, oder fehlgeschlagen ist. Es gibt einige Anstrengungen Standard zu schaffen (oder zumindest häufig verwendeten) Exit-Codes. Sehen Sie diese Advanced Shell Script Posting.

Wenn Sie möchten, portably die Standard POSIX Exit-Codes finden Sie in der exitstatus Paket auf PyPI.

Installieren Sie das Paket:

pip install exitstatus

Verwenden Sie in Ihrem Code:

import sys
from exitstatus import ExitStatus

sys.exit(ExitStatus.success)

Der Exit-Codes nur hat wie vom Skript-Autor zugeordnet Bedeutung. Die Unix-Tradition ist, dass Exit-Code 0 bedeutet ‚Erfolg‘, alles andere versagt hat. Der einzige Weg, um sicher zu sein, was der Exit-Codes für ein bestimmtes Skript bedeutet ist das Skript selbst zu untersuchen.

Die Antwort ist "hängt von Exit-Code Null bedeutet"

Doch in den meisten Fällen bedeutet dies, "Alles ist in Ordnung"


Ich mag POSIX:

Also, auf der Schale, und ich habe ein:

python script.py && echo 'OK' || echo 'Not OK'

Wenn mein Python-Skript Anrufe sys.exit(0) die Shell kehrt auf 'OK'

Wenn mein Python-Skript ruft sys.exit(1) (oder eine ganze Zahl ungleich Null), die Shell zurückkehrt 'Nicht OK'

Es ist Ihre Aufgabe mit der Shell klug zu bekommen, und die Dokumentation (oder die Quelle) liest für Ihr Skript, um zu sehen, was der Exit-Codes bedeuten.

  

ich ein sauberes Herunterfahren mit dem Ausgang empfehlen (0) gebautet anstatt sys.exit ()

Ich bin mir nicht sicher, ob dies ist ein guter Rat.

Die sehr Dokumentation erwähnt lautet:

  

Die Seite Modul (die bei der Inbetriebnahme automatisch importiert wird, es sei denn, die -S-Befehlszeilenoption angegeben wird) fügt mehrere Konstanten des eingebauten im Namensraum. Sie sind nützlich für den interaktiven Interpreter Shell und sollte nicht in Programmen verwendet werden .

Dann:

  

exit (code = None)

     

Objekte, wenn sie gedruckt wird, eine Nachricht auszudrucken wie „Use beenden () oder Ctrl-D (d.h. EOF) zu beenden“, und wenn sie aufgerufen wird, erhöhen Systemexit mit dem angegebenen Beendigungscode.

Wenn wir vergleichen es mit sys.exit () Dokumentation, ist mit dem gleichen Mechanismus, der eine SystemExit Ausnahme erzieht.

Beenden Codes in vielen Programmiersprachen sind bis zu Programmierern. Also müssen Sie in Ihrem Programm-Quellcode suchen (oder manuell). Null bedeutet in der Regel „alles ging gut.“

Exception-Handler und andere Dinge zu ermöglichen, auszuführen empfehle ich eine saubere Abschaltung mit dem exit(0) gebautet anstatt sys.exit(), die abrupt beendet den Vorgang.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top