SIGINT를 예외 처리하려면?

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

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

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

소스코드(Perl)

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

sub exit_gracefully {
    print "Caught ^C \n";
    exit (0);
}

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()
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.