How does one catch signals (specifically/especially SIGINT) in a translated RPython program?
I've grepped through the PyPy source tree, I found the CPython signal module, and attempting to use this in the translated program gives the expected error during translation:
[translation:ERROR] Exception: unexpected prebuilt constant: <built-in function signal>
There is also pypy.module.signal but I don't know if that's what I should be using, or how to use it. That module does provide a signal function, but it takes an additional space parameter; these space parameters appear a few places through the source tree and I can't work out what they refer to, or what I should pass there.
Background: I'm looking to have a computation that runs for an arbitrary length of time, but capture ^C so that I can print out the results so far before the program exits. (The obvious try: ... except KeyboardInterrupt: ... around the main loop doesn't work either.)
You'll have to use the RPython signal handling functions, which are a little wrapper over the platform ones. The functions you'll need are in
pypy.module.signal.interp_signal. For example,pypysig_ignore(signum)is equivalent tosignal(signum, SIG_IGN). Callpypysig_pollto return the pending signal if there is one. Here's a excerpt to ask for the signal to be handled and wait for it to arrive