SIGINT를 예외 처리하려면?


DB에 연결해서 쓰는 프로그램에서 SIGINT(ctrl+c)를 받으면 바로 꺼지는 게 아니라 DB랑 관련된 걸 정리해준 뒤에 프로그램을 종료해야 합니다.

언제 SIGINT가 들어올지 모르니 전체 스크립트를 try-except로 감싸는 건 좀 아닌 것 같고.

Perl에서는 이런 방법을 썼는데 파이썬에서는 어떻게 해야되나요?

소스코드(Perl)

$SIG{'INT'} = 'exit_gracefully';

sub exit_gracefully {
    print "Caught ^C \n";
    exit (0);
}
  • 2016년 01월 21일에 작성됨

조회수 281


1 답변


좋아요
0
싫어요
채택취소하기

DB 정리하는 코드를 handler함수로 만든 뒤에 signal.signal()로 이 handler를 등록해야 합니다. 윈도우의 경우 SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERMsignal()을 쓸 수 있으므로 주의해주세요.

#!/usr/bin/env python
import signal
import sys
def signal_handler(signal, frame): #SIGINT handler정의
        print('You pressed Ctrl+C!')
        #DB정리하는 코드
        sys.exit(0)
signal.signal(signal.SIGINT, signal_handler) #등록
print('Press Ctrl+C')
signal.pause()
  • 2016년 01월 21일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close