Python 3 で SIGINT をキャプチャする方法は?

PYTHON3 チュートリアル

Python 3でSIGINTをキャプチャする方法

Python 3において、SIGINT(Ctrl+C)シグナルをキャプチャする方法は、signalモジュールを使用することで実現できます。SIGINTは通常、プログラムを強制終了するために使用されますが、キャプチャすることでプログラムが正常に終了する際に必要な後処理を行うことができます。

関連知識

Pythonのsignalモジュールは、シグナル処理を行うための機能を提供しています。このモジュールを使用することで、プログラムがシグナルを受信した際の挙動をカスタマイズすることができます。

サンプルコード

以下に、SIGINTをキャプチャして特定の処理を行うサンプルコードを示します。

import signal
import sys

def signal_handler(sig, frame):
    print('SIGINTを受信しました。終了処理を実行します。')
    # ここに終了処理を記述する
    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)

while True:
    pass

上記のコードでは、signal_handler関数がSIGINTを受信した際に呼び出され、終了処理を実行してプログラムを正常に終了させます。

別のサンプルコード

次に、SIGINTをキャプチャして例外を発生させるサンプルコードを示します。

import signal

def signal_handler(sig, frame):
    raise KeyboardInterrupt

signal.signal(signal.SIGINT, signal_handler)

try:
    while True:
        pass
except KeyboardInterrupt:
    print('SIGINTをキャプチャしました。')

このコードでは、SIGINTを受信するとKeyboardInterrupt例外が発生し、それをキャッチしてメッセージを表示しています。

別のアプローチ

最後に、SIGINTをキャプチャして特定の処理を実行し、その後元のシグナルハンドラを呼び出すサンプルコードを示します。

import signal
import sys

def signal_handler(sig, frame):
    print('SIGINTを受信しました。終了処理を実行します。')
    # ここに終了処理を記述する
    signal.signal(signal.SIGINT, original_sigint)
    os.kill(os.getpid(), signal.SIGINT)

original_sigint = signal.getsignal(signal.SIGINT)
signal.signal(signal.SIGINT, signal_handler)

while True:
    pass

このコードでは、SIGINTを受信した際に一時的に設定したシグナルハンドラで終了処理を行った後、元のシグナルハンドラを呼び出しています。

Python 3 で SIGINT をキャプチャする方法は、signal モジュールを使用することです。以下のように、signal モジュールをインポートして、signal.signal() 関数を使用して SIGINT シグナルをキャプチャするハンドラ関数を設定します。

“`python
import signal

def handler(signum, frame):
print(‘SIGINT をキャプチャしました’)

signal.signal(signal.SIGINT, handler)
“`

このコードでは、SIGINT シグナルが発生すると、指定したハンドラ関数が実行されます。ハンドラ関数内で必要な処理を記述することで、SIGINT をキャプチャして適切に処理することができます。

購読
通知
0 Comments
Inline Feedbacks
View all comments