OnlineJudge/utils/signal2str.py

27 lines
849 B
Python
Raw Normal View History

2016-05-31 15:35:05 +00:00
# copy from https://github.com/DMOJ/judge/issues/162
try:
# in large part from http://code.activestate.com/recipes/578899-strsignal/
import signal
import ctypes
import ctypes.util
libc = ctypes.CDLL(ctypes.util.find_library("c"))
strsignal_c = ctypes.CFUNCTYPE(ctypes.c_char_p, ctypes.c_int)(("strsignal", libc), ((1,),))
NSIG = signal.NSIG
def strsignal_ctypes_wrapper(signo):
# The behavior of the C library strsignal() is unspecified if
# called with an out-of-range argument. Range-check on entry
# _and_ NULL-check on exit.
if 0 <= signo < NSIG:
s = strsignal_c(signo)
if s:
return s.decode("utf-8")
return "Unknown signal %d" % signo
strsignal = strsignal_ctypes_wrapper
except:
strsignal = lambda x: 'signal %d' % x