Pythonの終了コマンド - なぜこんなにたくさんのコマンドがあるのか、そしてそれぞれをいつ使うべきなのか?

pythonはスクリプトの実行を停止するための様々なコマンドをサポートしているようです。 quit(), exit(), sys.exit(), os._exit() です。

何か見逃していませんか? それぞれの違いは何ですか?どのような場合に使用しますか?

いくつかの情報をご紹介しましょう。

1.quit()`は裏で[SystemExit][2]という例外を発生させます。

さらに、それをプリントすると、メッセージが出ます。

    >>> print (quit)
    quit() または Ctrl-Z + Return で終了します。
    >>&gt

この機能は、Pythonを知らない人のために搭載されました。 結局のところ、初心者が Python を終了させようとする最も可能性の高いことの一つは quit を入力することです。

とはいえ、quit はプロダクションコードでは 使うべきではありません 。 なぜなら、この関数は site` モジュールがロードされている場合にのみ動作するからです。 代わりに、この関数はインタープリタでのみ使用してください。

2.2. exit()quit (またはその逆)の別名です。 これらは単に Python をより使いやすくするために一緒に存在しています。

さらに、これも出力時にメッセージを表示します。

    >>> print (exit)
    exit() または Ctrl-Z + Return で終了します。
    >>>

ただし、quitと同様に、exitもプロダクションコードでは使用しないほうがよいとされており、インタプリタでの使用にとどめておくべきです。 これは、exitsiteモジュールに依存しているからです。

3.3. sys.exit() はバックグラウンドで SystemExit 例外を発生させます。 つまり、その点では quitexit と同じなのです。

しかし、これらの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

解説 (8)

関数* 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()は呼び出し可能なインスタンスオブジェクトですが、関数と呼んでも問題ないと思います。

解説 (0)

Different Means of Exiting

os._exit()です。

  • クリーンアップハンドラを呼び出さずにプロセスを終了します。

exit(0)です。

  • エラーや問題を起こさずにきれいに終了します。

exit(1)です。

  • 何らかの問題/エラー/問題が発生したため、プログラムが終了しています。

sys.exit()です。

  • システムとpythonがシャットダウンすることは、プログラム実行後に使用されるメモリが少なくなることを意味します。

quit()です。

  • pythonファイルを閉じます。

まとめ

基本的にはどれも同じことをしていますが、何のためにそれをするのかにもよります。

抜けているところはないと思いますが、quit()exit()に慣れることをお勧めします。

sys.exit()やos._exit()を使うのは、主に大きなファイルを使っている場合や、pythonでターミナルを操作している場合です。

それ以外は主に exit()quit() を使います。

解説 (1)