1
비 차단 (settimeout 사용)을 허용하는 간단한 소켓 서버를 개발하려고하지만 Ctrl-C (KeyboardInterrupt)를 사용하여 중지 할 수 있기를 바랍니다.socket.timeout 예외 처리기에서 KeyboardInterrupt를 잡는 방법?
내 코드는 이것이다 :
import socket
host = '127.0.0.1'
port = 5000
s = socket.socket()
s.settimeout(1)
s.bind((host, port))
s.listen(1)
print('Server started')
while True:
try:
conn, addr = s.accept()
except socket.timeout:
pass
except Exception as exc:
print(str(exc))
print('Server closing')
s.close()
break
except KeyboardInterrupt:
print('Server closing')
s.close()
break
else:
print('Connection from', addr)
을하지만이 socket.timeout 예외 핸들러 내부에서 발생하기 때문에 KeyboardInterrupt 잡힌되지 않습니다. 이 Ctrl-C를
c:\Users\JMatos\MEOCloud\Python>python file_server.py
Server started
Traceback (most recent call last):
File "file_server.py", line 40, in <module>
conn, addr = s.accept()
File "C:\Python35-32\lib\socket.py", line 195, in accept
fd, addr = self._accept()
socket.timeout: timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "file_server.py", line 40, in <module>
conn, addr = s.accept()
KeyboardInterrupt
을 눌러 출력은 socket.timeout 예외 핸들러 내부에 KeyboardInterrupt 예외를 잡을 수있는 방법이 무엇입니까?
내 env는 Windows 7P + SP1 x64, Python 3.5.2 32b입니다. 사전에
감사합니다,
감사합니다. – jmatos