mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-07 20:54:28 +08:00
Signal handler callables take int, not Signals (#5622)
The documentation for [`signal.signal`][1] points out that the current
annotation for signal handlers might be wrong (emphasis my own):
> The handler is called with two arguments: the signal **number** and the
> current stack frame (**`None` or** a frame object; for a description of frame
> objects, see the description in the type hierarchy or see the attribute
> descriptions in the `inspect` module).
And when we use them, we can see that the signal number is passed as an `int`,
not a `signal.Signals` member:
import signal
def handler(signal_number, frame):
print("In signal handler!")
print("Signal number:", signal_number, type(signal_number))
print("Stack frame: ", frame, type(frame))
# Set signal handler:
signal.signal(signal.SIGHUP, handler)
# Use it:
signal.raise_signal(signal.SIGHUP)
Which prints:
In signal handler!
Signal number: 1 <class 'int'>
Stack frame: <frame at 0x7f804402abe0, file '<stdin>', line 12, code <module>> <class 'frame'>
[1]: https://docs.python.org/3/library/signal.html#signal.signal
This commit is contained in:
@@ -80,7 +80,7 @@ if sys.platform != "win32":
|
||||
SIG_SETMASK = Sigmasks.SIG_SETMASK
|
||||
|
||||
_SIGNUM = Union[int, Signals]
|
||||
_HANDLER = Union[Callable[[Signals, FrameType], Any], int, Handlers, None]
|
||||
_HANDLER = Union[Callable[[int, Optional[FrameType]], Any], int, Handlers, None]
|
||||
|
||||
SIGABRT: Signals
|
||||
if sys.platform != "win32":
|
||||
|
||||
Reference in New Issue
Block a user