Was ist der Unterschied zwischen sys.exit (0) und os._exit (0)?

72

Bitte helfen Sie mir bei der Klärung des Konzepts dieser beiden Python-Anweisungen hinsichtlich des Unterschieds in der Funktionalität:

  1. sys.exit(0)

  2. os._exit(0)

Aamir Adnan
quelle
8
Haben Sie die Dokumente nachgeschlagen?
JDI

Antworten:

74

Laut Dokumentation :

os._exit():

Beenden Sie den Prozess mit dem Status n, ohne Bereinigungshandler aufzurufen, Standardpuffer zu leeren usw.

Hinweis Die Standardmethode zum Beenden ist sys.exit(n). _exit()sollte normalerweise erst im untergeordneten Prozess nach a verwendet werden fork().

NPE
quelle
2
In meinem Programm starte ich mehrere Threads. Ich wollte, dass das gesamte Programm beendet wird, wenn es in einem Thread eine Ausnahme gibt. Ich benutze sys.exit (1) mit Ausnahme von Thread, aber dies wird nur von einem einzelnen Thread beendet, nicht vom Programm. Also habe ich os_exit (1) verwendet. Ist das ein guter Ansatz?
Aamir Adnan
14
Könnte jemand erweitern, "sollte normalerweise nur im untergeordneten Prozess nach einem fork () verwendet werden"? Vielen Dank
Gringo Suave
Warum erfordert die "Standardmethode zum Beenden" den Import eines Moduls? Scheint lächerlich.
Deanresin
1
@ Deanresin Warum muss es eingebaut sein? Auch in C müssen Sie einschließen stdlib.h.
Ignatius
36

os._exitruft die C-Funktion auf, _exit()die eine sofortige Programmbeendigung durchführt. Beachten Sie die Aussage "kann niemals zurückkehren".

sys.exit()ist identisch mit raise SystemExit(). Es wird eine Python-Ausnahme ausgelöst, die vom Aufrufer abgefangen werden kann.

Ursprünglicher Beitrag: http://bytes.com/topic/python/answers/156121-os-_exit-vs-sys-exit

Prelic
quelle