Есть ли способ отобразить число сигнала (например, сигнал. SIGINT) к его соответствующему имени (т.е. "SIGINT")?
Я хотел бы смочь распечатать название сигнала в журнале, когда я получаю его, однако я не могу найти карту от чисел сигнала до имен в Python, т.е.:
import signal
def signal_handler(signum, frame):
logging.debug("Received signal (%s)" % sig_names[signum])
signal.signal(signal.SIGINT, signal_handler)
Для некоторого словаря sig_names, поэтому когда процесс получает SIGINT, он печатает:
Received signal (SIGINT)
Ее нет, но если вы не против небольшого хака, вы можете создать ее следующим образом:
import signal
dict((k, v) for v, k in reversed(sorted(signal.__dict__.items()))
if v.startswith('SIG') and not v.startswith('SIG_'))
Ну, help(signal)
говорит внизу:
DATA
NSIG = 23
SIGABRT = 22
SIGBREAK = 21
SIGFPE = 8
SIGILL = 4
SIGINT = 2
SIGSEGV = 11
SIGTERM = 15
SIG_DFL = 0
SIG_IGN = 1
Так что это должно работать:
sig_names = {23:"NSIG", 22:"SIGABRT", 21:"SIGBREAK", 8:"SIGFPE", 4:"SIGILL",
2:"SIGINT", 11:"SIGSEGV", 15:"SIGTERM", 0:"SIG_DFL", 1:"SIG_IGN"}