Как избежать исключения Python при обработке SIGINT
import signal
import time
def sigint_handler(signum, frame):
print 'User pressed CTRL+C!'
signal.signal(signal.SIGINT, sigint_handler)
def main():
while True:
print 'Script to handle SIGINT'
time.sleep(2)
##########
if __name__ == "__main__":
main()
Как я могу заблокировать это ниже исключение, выдаваемое самим питоном при выполнении кода:
File "D:\Documents\scripts\ctrlc handler.py", line 19, in <module> main()
File "D:\Documents\scripts\ctrlc handler.py", line 14, in main
time.sleep(2) OError: [Errno 4] Interrupted function call
1 ответ
Решение
Эта проблема, похоже, связана с тем, что принимаются разные сигналы и возникают разные ошибки. Смотрите также это может быть для справки. Обходной путь, который я мог придумать, заключался в том, чтобы перехватить и проигнорировать OSError/IOError, который выдается следующим образом:
import signal
import time
def sigint_handler(signum, frame):
print 'User pressed CTRL+C!'
signal.signal(signal.SIGINT, sigint_handler)
def main():
while True:
print 'Script to handle SIGINT'
try:
time.sleep(2)
except IOError:
pass
##########
if __name__ == "__main__":
main()
Который работает отлично.
Script to handle SIGINT
User pressed CTRL+C!
Script to handle SIGINT
User pressed CTRL+C!
Script to handle SIGINT
User pressed CTRL+C!
Script to handle SIGINT
User pressed CTRL+C!
Script to handle SIGINT
User pressed CTRL+C!
Script to handle SIGINT
User pressed CTRL+C!
Script to handle SIGINT
User pressed CTRL+C!
Script to handle SIGINT
User pressed CTRL+C!