스크립트에서 여러 파일과 데이터베이스 연결을 열어 적절한 SIGINT 처리를 구현하고 싶습니다. 스크립트가 Ctrl + C 또는 다른 방법으로 중단 된 경우에는 닫아야합니다.SIGINT를 올바르게 처리하여 파일/연결을 닫는 방법
이전에 KeyboardInterrupt
예외를 사용하여 CTRL + C를 잡았습니다. 파일/연결이 정의되어 있는지 확인한 다음 닫았다면 닫고 종료하십시오.
정말이 방법을 사용하는 것이 좋을까요, 아니면 신호 처리기를 사용하는 것이 더 좋을까요? 예 :
import signal, sys, time
def handler(signum, frame):
print("..kthxbye")
sys.exit(1)
def main():
signal.signal(signal.SIGINT, handler)
i = 0
while True:
print(i)
i += 1
time.sleep(1)
if __name__ == "__main__":
main()
이 나에게 청소기 보인다, 그러나 나는 핸들러에 파일 이름이나 데이터베이스 연결을 통과 할 방법을 모르겠어요.
답변 해 주셔서 감사합니다. 그래서 나는 KeyboardInterrupt : print ("clean-up")'을 제외하고 try : print ("파일과 데이터베이스와 stuff")를 제외하고 try/main을 사용하여 몇 백 줄의 메인을 감싸는 것이 좋습니다. –
@DaedalusMythos 긴 방법이나 긴 블록을 결코 선호하지 않습니다 (try-except 블록으로 사용하십시오). 대신 주요 함수의 전체 고기를 다른 함수 (예 : : safe_main())에 넣고 주 함수에서 try 블록에 함수 호출 만있는 간단한 try-except 구조 만 있으면됩니다. 마찬가지로 except 블록을 단순화 할 수 있습니다. 예를 들어, C + +에서 표준 라이브러리는 try-catch 블록으로 싸여있는 main 함수를 유사하게 호출합니다. – pasztorpisti
@DaedalusMythos 글쎄, 당신은 기본적으로 기본적으로 2 개의 주요 블록을 가지고 있다는 것을 알아 챘습니다 ...'if __name__ == "__main __":'블록에서 try-except를 쉽게 할 수 있습니다. 그런 다음 try 블록은'main()'호출 만 포함합니다. 내 업데이트 답변을 참조하십시오. – pasztorpisti