我有一个简单的生成器,它从套接字读取数据并在接收到数据时生成每个数据 block 。
while True:
data = s.recv(512)
if not data:
break
yield data
数据看起来像一个 csv 文件,因此包含换行符。如何更改我的代码以生成文本行而不是缓冲区大小?我玩过 split('\n'),但总是卡在如何检测最后一个 block 可能不是完整行的事实上,我需要等待下一个数据 block 。
谢谢。
最佳答案
您可以调用 socket.makefile()
然后使用文件对象(遍历行或调用 .readline()
):
import socket
from contextlib import closing
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
s.connect(("127.0.0.1", 8080))
s.sendall("GET / HTTP/1.0\r\n\r\n")
with closing(s.makefile()) as f: #NOTE: closed independently
for line in f:
print line,
s.shutdown(socket.SHUT_WR)
关于python - 如何使用生成器在换行符上拆分套接字读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5848087/