Ответ 1
Просто проведите прямо по файловому объекту:
for line in data:
print line
Это считывает входящий поток данных по строкам (внутри, файл файла сокета вызывает .readline()
каждый раз, когда вы итерации). Это предполагает, что ваш сервер как можно скорее отправляет данные.
Вызов .readlines()
(множественное число) гарантирует, что вы прочитали весь запрос до начала цикла, не делайте этого.
В качестве альтернативы используйте библиотеку requests
, которая имеет более явную поддержку для потоковой передачи запросов:
import requests
r = requests.get(url, stream=True)
for line in r.iter_lines():
if line: print line
Обратите внимание, что это будет работать, только если ваш сервер немедленно начнет передавать данные. Если ваш CGI не выводит данные до завершения процесса, нет смысла пытаться передать данные.