如何用键盘中断Python中的recvfrom()调用?

时间:2014-11-27 19:49:19

标签: python sockets python-2.7 udp

我在程序的main()函数中运行了一个循环,如下所示

while True:
    data, addr = sock.recvfrom(MAX_MESS_LEN)
    thread.start_new_thread(message_handler, (data, addr,))

我想介绍一些功能,让我可以点击'q'来打破循环并结束程序。我不知道如何执行此操作,因为程序在收到消息之前等待recvfrom()调用。有没有办法实现中断键或键盘事件捕捉器?现在我使用ctrl-c键盘中断程序,但这看起来有点草率。

1 个答案:

答案 0 :(得分:0)

您可以先尝试检查套接字中是否有数据,然后再尝试从中接收数据?

dataInSocket, _, _ = socket.select.select([sock], [], [])
if dataInSocket:
    data, addr = sock.recvfrom(MAX_MESS_LEN)
    thread.start_new_thread(message_handler, (data, addr,))

我在这里稍微猜到了你的代码,所以这段代码可能不会干净地复制并粘贴到你的代码中。你需要让它适合你自己的程序。