less than 1 minute read

Pythonのプログラムで、いわゆるシグナルを扱うには、signalパッケージを用いて、ハンドラを登録することになる。以下、サンプルである(signal-sample.py)。

import signal
import time
import sys

CNT = 0

def signal_handler(sig, _):
    global CNT
    CNT += 1
    print(f" receive {signal.Signals(sig)}. CNT={CNT}")
    if CNT >= 3:
        sys.exit(0)

def main():
    signal.signal(signal.SIGINT, signal_handler)
    print("Ctrl-Cを3回押してください")
    while True:
        time.sleep(100)

if __name__ == "__main__":
    main()

このプログラムでは、SIGINTが届いたときに、1. CNTの値をインクリメントする 2. CNTが一定回数以上ならば全体を終了する、という動作を行う。

以下が動作例である。実行直後、プログラムは無限ループに入る。Ctrl-CによりSIGINTを3回送ると、ハンドラが動作してプログラムが終了する。

$ python signal-sample.py
Ctrl-Cを3回押してください
^C receive 2. CNT=1
^C receive 2. CNT=2
^C receive 2. CNT=3

タグ:

カテゴリー:

更新日時: