.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. Python
  5. [Python]exit関数について解説|3種類のexit関数を理解して使いこなそう

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

  • Python
  • プログラミング言語
公開日時:   更新日時:
[Python]exit関数について解説|3種類のexit関数を理解して使いこなそう
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>
    システム
    エンジニア
    Pythonのexit関数について教えていただけますか。
    プロジェクト
    マネージャー
    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関数を用いても良いでしょう。

    システム
    エンジニア
    Pythonの3種類のexit関数から適切なexit関数を選んで使えるように練習します。
    プロジェクト
    マネージャー
    ご紹介した方法を参考にして適切なexit関数を選んで使えるようにしっかり理解して活用してください。

    最後に

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

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

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

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

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    Python新着案件New Job