Сообщить об ошибке.

Функция signal() модуля signal в Python

Устанавливает обработчик для сигнала OS

Синтаксис:

import signal

signal.signal(signalnum, handler)

Параметры:

  • signalnum - сигнал OS.
  • handler - функция обработчик сигнала.

Возвращаемое значение:

  • предыдущий обработчик сигнала.

Описание:

Функция signal() модуля signal устанавливает обработчик для сигнала signalnum на обработчик функции handler.

Обработчик handler может быть вызываемым объектом Python, принимающим два аргумента, или одним из специальных значений signal.SIG_IGN или signal.SIG_DFL.

Функция signal.signal() возвращает предыдущий обработчик сигнала (смотрите описание функции signal.getsignal()).

Для получения дополнительной информации смотрите справочную страницу signal(2).

Когда задействованы потоки, то функция signal.signal() может вызываться только из основного потока. Попытка вызвать его из других потоков вызовет исключение ValueError.

Обработчик handler вызывается с двумя аргументами: номер сигнала signalnum и текущий кадр стека (None или объект кадра, описание объектов кадра можно посмотреть в описании атрибутов в модуле inspect).

В Windows signal.signal() может вызываться только с signal.SIGABRT, signal.SIGFPE, signal.SIGILL, signal.SIGINT, signal.SIGSEGV, signal.SIGTERM или signal.SIGBREAK.

В любом другом случае будет вызываться ошибка ValueError.

Обратите внимание, что не все системы определяют одинаковый набор имен сигналов. Если имя сигнала не определено как константа уровня модуля SIG* будет сгенерировано исключение AttributeError.

Примеры:

Пример программы, которая использует функцию OS signal.alarm(), чтобы ограничить время ожидания открытия файла. Такое поведение полезно, если файл предназначен для последовательного устройства, которое может не включаться, что приводит к зависанию функции os.open() на неопределенное время. Решение состоит в том, чтобы установить 5-секундную тревогу перед открытием файла. Если операция занимает слишком много времени, сигнал тревоги будет отправлен, и обработчик вызывает исключение.

import signal, os

def handler_alarm(signum, frame):
    print('Signal handler called with signal', signum)
    raise OSError("Couldn't open device!")

# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGALRM, handler_alarm)
signal.alarm(5)

# This open() may hang indefinitely
with os.open('/dev/ttyS0', os.O_RDWR) as fp:
    # Отключить alarm
    signal.alarm(0)
    # код обработки файла
    ...