Pythonのsys
モジュールに含まれるsys.exit()
という関数は、呼び出すとプログラムを終了し、引数をプロセスの戻り値とするが、その引数についてをここで扱う。
整数を引数に指定すると、指定された値がそのままプロセスの戻り値になる。
sysexittest_int.py
エンコーディング:UTF-8
#! /usr/bin/python3
# -*- coding: utf-8 -*-
import sys
# 整数ではそのままの値を戻り値とする
sys.exit(5)
下は実行例。
$ [sysexittest_int.pyの場所]
(出力なし)
$ echo ${?}
5
整数をsys.exit('5')
のような文字列として渡した場合は、整数ではなく文字列を渡した場合(後述)と同じように扱われる。
None
を指定すると、プロセスの戻り値は0
(正常終了時の値)となる。
整数の0
を指定しても同じ。
sysexittest_none.py
エンコーディング:UTF-8
#! /usr/bin/python3
# -*- coding: utf-8 -*-
import sys
# 「None」は正常終了・「0」でも同じ
sys.exit(None)
下は実行例。
$ [sysexittest_none.pyの場所]
(出力なし)
$ echo ${?}
0
文字列を指定すると、標準エラー出力に引数の内容を表示しつつプロセスの戻り値は0
以外(正常ではない終了の値)になる。
これは何かのエラーが発生したときにメッセージを出力して終了し、0
以外の戻り値も設定したいというときに役に立つ。
sysexittest_str.py
エンコーディング:UTF-8
#! /usr/bin/python3
# -*- coding: utf-8 -*-
import sys
# 文字列を指定するとその内容を表示エラー出力に出力しつつ0以外の戻り値を返す
sys.exit("Error !!")
下は実行例。
$ [sysexittest_str.pyの場所]
Error !!
$ echo ${?}
1
下は標準エラー出力に出力されていることの確認。
$ [sysexittest_str.pyの場所] > /dev/null
Error !!
$ [sysexittest_str.pyの場所] 2> /dev/null
(出力なし)
整数や文字列以外のデータ(小数,リスト型,文字列以外のオブジェクト型など)を指定した場合、プロセスの戻り値は文字列を指定した場合と同様となるが、表示のされ方が異なり、print()
関数で表示したときと同じような形となる。
例えば、文字列以外のオブジェクト型では<[__name__の値].[クラス] instance at 0x......>
のような形。
sysexittest_obj.py
エンコーディング:UTF-8
#! /usr/bin/python3
# -*- coding: utf-8 -*-
import sys
# 空の内容のクラス
class TestClass:
pass
obj = TestClass()
# オブジェクトを渡してみる
sys.exit(obj)
下は実行例。
$ [sysexittest_obj.pyの場所]
<__main__.TestClass object at 0x7fbf2d04a110>
$ echo ${?}
1