문제

Eclipse에서 이 파일을 실행하려고 합니다.

class Try:
   def __init__(self):
       pass
   def __del__(self):
       print 1
a=Try()
raw_input('waiting to finish')

프로그램을 종료하지 않고 중지 버튼을 누르면 "1"이 인쇄되지 않습니다. 즉, del 메소드가 호출되지 않습니다.쉘에서 스크립트를 실행하려고 시도하고 ctrl-c\sys.exit "1"이 인쇄되면 즉, del이 호출됩니다.wait()를 사용하려고 해도 마찬가지입니다.

class A:

    def __enter__(self):
        return None
    def __exit__(self, type, value, traceback):
        print 3


with A():
    print 1
    raw_input('Waiting')
    print 2

메시지가 표시될 때 "중지"를 누르면 "3"이 인쇄되지 않습니다.

왜 그런 겁니까?그 주위에 방법이 있나요?

고마워요, 노암

도움이 되었습니까?

해결책

Eclipse에서 중지를 누르면 인터프리터가 완전히 종료됩니다(실제로는 꽤 자주 실패하지만).사용하는 것처럼 kill/taskkill, 프로세스는 종료를 인식하지 못합니다.

Ctrl+C Wikipedia의 일부...

Abort 명령으로서의 Control-C는 UNIX에 의해 대중화되었으며 다른 시스템에서 채택되었습니다.POSIX 시스템에서 시퀀스는 활성 프로그램이 Sigint 신호를 수신하게합니다.프로그램 이이 조건을 처리하는 방법을 지정하지 않으면 종료됩니다.일반적으로 Sigint를 처리하는 프로그램은 여전히 ​​스스로 종료되거나 적어도 그 내부에서 실행되는 작업을 종료합니다.

Ctrl+C 은 프로그램을 중단시키는 제어 신호이지만 해당 단락 중간에서 알 수 있듯이 프로그램은 신호를 처리하는 방법을 지정할 수 있습니다.파이썬에서는 Ctrl+C KeyboardInterrupt 예외가 발생합니다. 일반적으로 잡힌 다음 Python이 깔끔하게 종료됩니다.통역사를 죽이더라도 Ctrl+C 종료하기 전에 환경을 청소하도록 처리할 수 있습니다.

"해결 방법이 있나요?"라고 질문하셨기 때문에 다음 내용을 포함시켰습니다.

멈추고 싶다면 raw_input(...) 전화하면 사용할 수 있습니다 Ctrl+Z EOF를 보내려고 합니다.주위를 둘러보니 보낼 방법이 없나 보다. Ctrl+C/0x03 불행히도 Eclipse에서는.

다른 팁

파이썬 문서 :

__del__(self)

인스턴스가 파괴 될 때 호출됩니다. 이것을 소멸자라고도합니다. 기본 클래스에 a __del__() 방법, 파생 클래스 __del__() 메소드는 인스턴스의 기본 클래스 부분을 올바르게 삭제하기 위해 명시 적으로 호출해야합니다. (권장하지는 않지만) 가능하다는 점에 유의하십시오. __del__() 방법에 대한 새로운 참조를 만들어 인스턴스의 파괴를 연기하는 방법. 그런 다음이 새로운 참조가 삭제 될 때 나중에 호출 될 수 있습니다. 보장되지 않습니다 __del__() 통역사가 종료 될 때 여전히 존재하는 객체에 대한 방법이 요구됩니다.

메소드를 사용한다고 보장하려면 진술과 함께

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top