Eclipse+Pydev:"중지"를 눌러도 "정리" 기능이 호출되지 않습니까?
문제
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__()
통역사가 종료 될 때 여전히 존재하는 객체에 대한 방법이 요구됩니다.
메소드를 사용한다고 보장하려면 진술과 함께