2011-09-08 4 views
1

저는이 질문이 매우 기본적인 경우 Python을 처음 접했습니다. 용서하십시오.느린 시스템 호출에서 SIGINT 처리

select 모듈을 사용하여 소켓에서 데이터를받는 동안 키보드 인터럽트를 처리하려고합니다. 그래서 select.select() 함수를 호출하여 소켓에서 데이터를 기다린 다음 콘솔로 출력합니다.

CTRL_C를 누르면 때때로 select.error가 발생하고 exception.IOError 예외가 발생하는 경우가 있습니다. 해당 오류 코드는 두 예외 모두에 대해 4입니다.

호출 스택에서 KeyboardInterrupt 예외를 더 자세히 처리하는 코드가 있으므로 소켓 연결을 허용하는 함수에서 SIGINT를 얻을 때 KeyboardInterrupt 예외를 다시 발생시키고 싶습니다. 나는 또한 연결 관련 예외를 잡아 내고 싶다.

예외의 오류 코드를 확인하고 4이면 KeyboardInterrupt를 높이는 것이 안전할까요? 이것이 연결 관련 예외를 잡는 내 능력에 영향을 줍니까? 오류 코드에 대한 좋은 자료가 있습니까?

감사합니다.

답변

1

errno.EINTR을 대신 사용하십시오. 그것은 안전하다.

>>> import errno 
>>> errno.EINTR 
4 

그러나,이 시스템 호출을 중단하는 신호를 말하지 않을 것이다, 해당 일부 신호를 중단.

사람이 에서 것은를 선택

 
EBADF An invalid file descriptor was given in one of the sets. (Per‐ 
     haps a file descriptor that was already closed, or one on which 
     an error has occurred.) 

EINTR A signal was caught; see signal(7). 

EINVAL nfds is negative or the value contained within timeout is 
     invalid. 

ENOMEM unable to allocate memory for internal tables. 
+0

이 답변 주셔서 감사합니다. 지금 당장. – ravil

관련 문제