終了コードは、プログラムが正常に終了したか、エラーで停止したかを示すコードで、0は正常終了を、0以外の数は異常終了を意味します。
終了コードはOSやシステムにプログラムの実行結果を伝える役割を持ちます。
通常、シェルやスクリプトで実行する場合、終了コードによって次の処理を決定することができます。
以下にPythonにおける基本的な扱い方と活用法をまとめてみます。
Pythonでの終了コードの指定方法
終了コードは、標準ライブラリのsys.exit()
を使って設定できます。
例えば、以下のように書きます。
import sys
# 正常終了(終了コード0)
sys.exit(0)
# エラー終了(終了コード1)
sys.exit(1)
sys.exit()
内で数値を指定することで、プログラムが終了する際のコードを決めることができます。
try-exceptによる終了コードの活用
エラーの種類に応じて異なる終了コードを設定することもできます。
たとえば、ファイルが見つからない場合と、アクセスが拒否された場合で異なる終了コードを指定することにより、システム側でのエラーハンドリングが容易になります。
try:
with open("example.txt", "r") as file:
content = file.read()
except FileNotFoundError:
print("File not found.")
sys.exit(1)
except PermissionError:
print("Permission denied.")
sys.exit(2)
サブプロセスと終了コード
Pythonではsubprocess
モジュールを使って他のプログラムを実行することが多くあります。
終了コードを取得するにはsubprocess.run()
を使い、戻り値としてreturncode
属性を利用します。
import subprocess
result = subprocess.run(["ls", "non_existent_file"])
print("Exit code:", result.returncode)
atexitモジュールを使った終了時の処理
atexit
モジュールを利用すると、プログラムが終了する前に特定の処理を行うことができます。
正常終了や異常終了問わずに終了時の処理が必要な場合に便利です。
import atexit
def on_exit():
print("Program is ending. Clean-up tasks are performed.")
atexit.register(on_exit)
カスタム終了コードの実装
終了コードには0~255の範囲で任意の値を設定できますが、数値に特定の意味を持たせるとよいでしょう。
例えば、0は正常終了、1は一般的なエラー、2はファイルエラーとすることで、終了コードだけで原因が明確になります。
# 正常終了
NORMAL_EXIT = 0
# 一般的なエラー
GENERAL_ERROR = 1
# ファイルエラー
FILE_ERROR = 2
try:
# 何らかの処理
sys.exit(NORMAL_EXIT)
except Exception:
sys.exit(GENERAL_ERROR)
まとめ
sys.exit()
で終了コードを指定し、プログラムの終了方法をコントロールできます。try-except
と組み合わせることで、エラーごとに異なる終了コードを設定可能です。subprocess
を使って終了コードを他のプロセスと連携させることができます。atexit
モジュールで終了時のクリーンアップ処理を実装可能です。
終了コードはシェルスクリプトなどからPythonスクリプトを制御する際にも役立ちます。