pythonはスクリプトの実行を停止するための様々なコマンドをサポートしているようです。 quit()
, exit()
, sys.exit()
, os._exit()
です。
何か見逃していませんか? それぞれの違いは何ですか?どのような場合に使用しますか?
いくつかの情報をご紹介しましょう。
1.quit()`は裏で[SystemExit
][2]という例外を発生させます。
さらに、それをプリントすると、メッセージが出ます。
>>> print (quit)
quit() または Ctrl-Z + Return で終了します。
>>>
この機能は、Pythonを知らない人のために搭載されました。 結局のところ、初心者が Python を終了させようとする最も可能性の高いことの一つは quit
を入力することです。
とはいえ、quit
はプロダクションコードでは 使うべきではありません 。 なぜなら、この関数は site` モジュールがロードされている場合にのみ動作するからです。 代わりに、この関数はインタープリタでのみ使用してください。
2.2. exit()
は quit
(またはその逆)の別名です。 これらは単に Python をより使いやすくするために一緒に存在しています。
さらに、これも出力時にメッセージを表示します。
>>> print (exit)
exit() または Ctrl-Z + Return で終了します。
>>>
ただし、quit
と同様に、exit
もプロダクションコードでは使用しないほうがよいとされており、インタプリタでの使用にとどめておくべきです。 これは、exit
もsite
モジュールに依存しているからです。
3.3. sys.exit()
はバックグラウンドで SystemExit
例外を発生させます。 つまり、その点では quit
や exit
と同じなのです。
しかし、これらの2つとは異なり、sys.exit
はプロダクションコードで使用しても良いとされています。 これは、sys`モジュールが常に存在するからです。
4.4. os._exit()
は、クリーンアップハンドラを呼び出したり、stdioバッファをフラッシュしたりすることなくプログラムを終了します。 したがって、これは標準的な終了方法ではなく、特別な場合にのみ使用すべきです。 最も一般的なのは、os.fork`で生成される子プロセスです。
与えられた4つの方法の中で、この方法だけがその機能においてユニークであることに注意してください。
まとめてみると、4つの方法はすべてプログラムを終了させます。 しかし、最初の2つはプロダクションコードでは使ってはいけないとされており、最後のものは特別なシナリオでしか使われない非標準的で汚い方法です。 ですから、普通にプログラムを終了させたいのであれば、3番目の方法であるsys.exit
を使いましょう。
さらに、私の意見では、sys.exit
が裏で行っていることを直接行って実行することもできます。
raise SystemExit
この方法では、最初に sys
をインポートする必要はありません。
しかし、この選択は単にスタイルの一つであり、純粋にあなた次第です。
[2]: http://docs.python.org/2/library/exceptions.html#exceptions.SystemExit
関数* quit()
、exit()
、sys.exit()
は、SystemExit
という例外を発生させるという点では同じように機能します。 つまり、sys.exit()
は常に利用可能ですが、exit()
とquit()
はsite
モジュールがインポートされている場合にのみ利用可能であるという点を除いては、実際の違いはありません。
Os._exit()関数は特別で、クリーンアップ関数を呼ばずに即座に終了します(バッファのフラッシュなどは行いません)。 これは非常に特殊なユースケースのために設計されています。基本的には、
os.fork()`を呼び出した後の子プロセスでのみ使用されます。
REPLでは、exit()
またはquit()
を使用してください。
スクリプトでは sys.exit()
を使用するか、または raise SystemExit()
を使用してください。
子プロセスが os.fork()
の呼び出し後に終了する場合は os._exit()
を使用してください。
これらはすべて、引数なしで呼び出すことができます。また、終了ステータスを指定することもできます。たとえば、ステータス1で終了するには、exit(1)
またはraise SystemExit(1)
とします。多くのシステムでは、raise SystemExit(256)
とすると、このコードは切り捨てられ、実際にはステータス0で終了することになります。
実際には、quit()
やexit()
は呼び出し可能なインスタンスオブジェクトですが、関数と呼んでも問題ないと思います。
os._exit()
です。
exit(0)
です。
exit(1)
です。
sys.exit()
です。
quit()
です。
基本的にはどれも同じことをしていますが、何のためにそれをするのかにもよります。
抜けているところはないと思いますが、quit()
やexit()
に慣れることをお勧めします。
sys.exit()やos._exit()を使うのは、主に大きなファイルを使っている場合や、pythonでターミナルを操作している場合です。
それ以外は主に exit()
や quit()
を使います。