Python/Utils

파이썬에서 종료 시에 특정 함수를 실행하는 방법(atexit 모듈)

jimmy_AI 2023. 10. 4. 21:40
반응형

Python으로 작성한 py 파일 프로그램이 종료되는 때에 맞추어

특정 함수를 실행시켜보고 싶은 경우가 있습니다.

 

이 경우에 atexit 라이브러리를 활용하면 

정상 종료, 오류로 인한 강제 종료의 경우를 모두 포함하여

원하는 기능을 간단하게 호출할 수 있습니다.

 

 

프로그램 종료 시점 함수 호출 기본 예제

만약 프로그램이 종료되는 시점에 exit_print라는 함수를 실행시키고 싶은 경우라면
다음과 같이 atexit 모듈의 register 메소드로 호출을 원하는 함수를 등록시켜주시면 됩니다.

import atexit
import time

def exit_print():
    print('프로그램이 종료됩니다!')

atexit.register(exit_print)

for i in range(5):
    print(f'남은 시간 : {5-i}초')
    time.sleep(1)

 

먼저, 프로그램이 정상 종료된 경우에는 아래와 같은 출력 메시지가 나타나게 됩니다.

남은 시간 : 5초
남은 시간 : 4초
남은 시간 : 3초
남은 시간 : 2초
남은 시간 : 1초
프로그램이 종료됩니다!

 

이번에는 실행 도중에 터미널에서 Ctrl + C를 눌러 강제 종료를 시켜보도록 하겠습니다.

이 경우에는 KeyboardInterrupt 오류가 발생하며, 다음과 같이 메시지가 출력됩니다.

남은 시간 : 5초
남은 시간 : 4초
남은 시간 : 3초
Traceback (most recent call last):
  File "C:\Users\my_file.py", line 11, in <module>
    time.sleep(1)
KeyboardInterrupt
프로그램이 종료됩니다!

 

두 경우 모두 '프로그램이 종료됩니다!' 메시지가 정상 출력된 것을 확인할 수 있습니다.

 

반응형

 

종료 시 호출되는 함수에 argument 추가 방법

atexit의 register 메서드에서는 종료 시 실행될 함수에 input 인자도 포함시킬 수 있습니다.

다음은 argument를 1개 받는 예시입니다. 위의 예제와 결과를 비교해보세요.

import atexit
import time

def exit_print(num):
    print('프로그램이 종료됩니다!')
    print(f'입력되었던 값은 {num}입니다.')

atexit.register(exit_print, 7) # input 인자 1개를 받는 경우

for i in range(5):
    print(f'남은 시간 : {5-i}초')
    time.sleep(1)

 

여기서 출력 결과는 아래와 같이 등장하게 됩니다.

남은 시간 : 5초
남은 시간 : 4초
남은 시간 : 3초
남은 시간 : 2초
남은 시간 : 1초
프로그램이 종료됩니다!
입력되었던 값은 7입니다.

 

물론, 2개 이상의 argument를 가지는 경우도 아래와 같이 지정할 수 있습니다.

def exit_print(num1, num2):
    print('프로그램이 종료됩니다!')
    print(f'입력되었던 값은 {num1}과 {num2}입니다.')

atexit.register(exit_print, 7, 10) # input 인자가 2개인 경우