我编写以下代码来接收数据,然后将数据写入文件。
我的问题是: 我发现if分支("如果不是数据:break")永远不会被执行, 1)。为什么永远不会达到if分支? 2)。我的代码如何退出while循环?
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/var/run/output.socket")
while True:
data = s.recv(1024)
if not data:
break
else:
f = open("/home/ematt/test.log",'a')
f.write(data)
答案 0 :(得分:0)
socket.recv总是有数据。它会等到一些数据到来。
答案 1 :(得分:0)
socket.recv是一个阻塞调用,它在收到数据时返回(或者对等方已关闭连接)
如果您想避免等待数据到达,可以使用
将套接字设置为non-blocking modes.setblocking(False)
在这种模式下,recv
在没有可用数据时抛出异常。
有关更多信息和有关如何使用它的代码示例,请参阅this SO QA