Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在socket.recv()之后永远无法到达break语句_Python_Python Sockets - Fatal编程技术网

Python 为什么在socket.recv()之后永远无法到达break语句

Python 为什么在socket.recv()之后永远无法到达break语句,python,python-sockets,Python,Python Sockets,我编写以下代码来接收数据,然后将数据写入文件 我的问题是: 我发现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:

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

我的问题是: 我发现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)

socket.recv始终具有数据。它将等待一些数据到达


请参见

socket.recv始终具有数据。它将等待一些数据到达

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

如果希望避免等待数据到达,可以将套接字设置为using

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

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

如果希望避免等待数据到达,可以将套接字设置为using

在这种模式下,
recv
在没有可用数据时抛出异常。
有关如何使用它的详细信息和代码示例,请参见,远程方关闭连接时除外。远程方关闭连接时除外。
s.setblocking(False)