1

我编写以下代码来接收数据,然后将数据写入文件。

我的问题是:我发现 if 分支(“ if not data: 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)
4

2 回答 2

0

socket.recv 总是有数据。它将等到一些数据到达。

https://docs.python.org/2/library/socket.html

于 2016-01-07T09:47:57.927 回答
0

socket.recv是一个阻塞调用,它在接收到数据时返回(或对等方已关闭连接)

如果您想避免等待数据到达,可以使用将套接字设置为非阻塞模式

s.setblocking(False)

在这种模式下,recv当没有数据可用时抛出异常。请参阅此 SO QA以获取更多信息和有关如何使用它的代码示例

于 2016-01-07T09:55:21.863 回答