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?
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.