.net column
.NET開発者のためのブログメディア

C# プログラミング

[Python]exit関数について解説|3種類のexit関数を理解して使いこなそう

2021年05月25日
SE
Pythonのexit関数について教えていただけますか。
PM
Pythonのexit関数は3種類あって内部動作が異なります。Pythonのexit関数について解説いたしましょう。

Pythonのexitとは?


Pythonのexitにはいくつか種類がありますが、インタラクティブシェルやプロセスを終了させるための関数のことです。exit関数は終了コードを返すことができますので、コマンドプロンプトなどのコマンドシェルで終了コードを受け取ることができます。

以下に示すコマンドやプログラムは基本的にWindows10とPython3.9.1で動作確認していますが、一部Windowsでは動作しないものがありましたので、Linux(Ubuntu20.10)とPython3.9.1で動作確認しています。

Pythonのexit関数の種類

Pythonのexit関数は3種類あります。exit関数、sys.exit関数、os._exit関数です。みんなそれぞれ同じような関数なのですが、内部処理が異なりますので状況により適切なものを利用するようにしてください。

exit関数

exit関数はインタラクティブシェルを終了させるのに用います。

Pythonにはインタラクティブシェル(対話型シェル)という機能があります。インタラクティブシェルでは、Pythonとお話するような感覚でプログラムを実行できます。インタラクティブシェルを起動するにはコマンドプロンプトを起動して、Python、またはpyコマンドを実行します。

インタラクティブシェルで、単にexitと入力すると使い方のメッセージが表示されます。exit()[Enter]と入力するとインタラクティブシェルを終了します。

ちなみにexit関数をプログラム中で実行するとSystemExit例外が発生します。

下記はインタラクティブシェルでexit関数を実行したときの様子です。

sys.exit関数

sys.exit関数はメインプロセスを終了します。サブプロセス(子プロセス)を作成した場合は、それを終了しませんのでご注意ください。

sys.exit関数は上の項のexit関数と挙動は同じです。下記のプログラムのsys.exit関数とexit関数のコメントを入れ替えてみて実行してみてください。どちらも「SystemExit」と表示されますので、SystemExit例外が発生しているのが分かります。

なお、sys.exit関数(exit関数も同様)の引数に数値(整数)を返すと終了コードになり、環境変数ERRORLEVELに設定されます。また、文字列で返すと終了コードは1になります。通常、終了コードは0が正常終了で、1(0以外)が異常終了になります。

os._exit関数

os._exit関数はos.fork関数によって作られた新しいプロセス(子プロセス)を終了させるための関数です。os._exit関数は子プロセス側で呼び出して実行します。親プロセス側を終了する場合は普通にsys.exit関数を呼び出して終了してください。

WindowsのPython3ではos.fork関数は対応していません。よって、ここではLinuxであるUbuntu20.10とPython3.9.1を用いた解説をします。

os._exit関数の引数に数値(整数)を返すと終了コードになり、親プロセスで取得できます。通常、終了コードは0が正常終了で、1(0以外)が異常終了になります。

下記のプログラムはos.fork関数で子プロセスを作成し、子プロセス側でexec_codeのプログラムを実行します。親プロセスは必要な処理が終わったらos.waitpid関数を呼び出して子プロセスが終了するまで待ちます。子プロセスが終了したら終了コードを得て終了します。

 

こちらが実行結果になります。

Pythonのexitの使い方

Pythonのexit関数はインタラクティブシェルまたはプロセスを終了させるための関数です。

組み込み関数のexit関数はインタラクティブシェルを終了させるために使用します。sys.exit関数はメインプロセスを終了させるのに使用します。プログラム途中で終了させる場合には、このsys.exit関数を用います。

引数には終了コードか文字列を指定します。終了コードは通常(異常のないとき)は0を指定します。異常なときは1(0以外)を指定します。文字列を指定すると終了コードは1が返ります。

os._exit関数はos.fork関数で子プロセスを作成したときに、子プロセス側で終了するときに使います。親プロセスは子プロセスが終了するのを待ってから終了するのが一般的です。なお、WindowsのPython3ではos.fork関数は使えません。ご注意ください。

os._exit関数について少し補足しておきますと、os._exit関数はWindowsにもあります。os._exit関数は例外を発生させるのではなく強制終了してしまうため、安全な終了の仕方ではありません。そのため通常はsys.exit関数を用いた方が良いでしょう。

どうしても「直ちに終了したい」とか、強制終了しても安全なことが分かっている場合に限り、os._exit関数を用いても良いでしょう。

SE
Pythonの3種類のexit関数から適切なexit関数を選んで使えるように練習します。
PM
ご紹介した方法を参考にして適切なexit関数を選んで使えるようにしっかり理解して活用してください。

最後に

exitは3種類ありましたが、理解して頂けたでしょうか。

いずれのexit関数も最終的には「終了コードを返してプロセスを終了する」という同じ動作のため、区別し難くなっています。

WindowsのPython3ではos.fork関数が使えないので、その部分だけLinux(Ubuntu)を用いて解説しました。できることならWindowsで全部統一したかったのですが、今回は仕方ありません。

sys.exit関数ではプロセスの終了コードが返せますので、コマンドプロンプトの環境変数ERRORLEVELで取得できます。そうすればバッチファイルで処理分けして、更に処理を自動化できたりします。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags