У меня есть клиент для веб-интерфейса для долгого процесса. Я хотел бы получить вывод из этого процесса, который будет отображаться по мере его появления. Отлично работает с urllib.urlopen()
, но он не имеет параметра timeout
. С другой стороны, с urllib2.urlopen()
выход буферизуется. Есть ли простой способ отключить этот буфер?unbuffered urllib2.urlopen
1
A
ответ
0
Быстрое взломавшееся мне сообщение должно использовать urllib.urlopen()
с threading.Timer()
, чтобы эмулировать таймаут. Но это только быстрый и грязный взлом.
0
urllib2
в буфер, когда вы просто звоните read()
вы можете определить размер для чтения и поэтому отключить буферизацию.
, например:
import urllib2
CHUNKSIZE = 80
r = urllib2.urlopen('http://www.python.org')
while True:
chunk = r.read(CHUNKSIZE)
if not chunk:
break
print(chunk)
это было бы напечатать ответ после того, как каждый фрагмент считывается из розетки, а не буфером, пока весь ответ не получен.
Очень похожий вопрос на http://stackoverflow.com/questions/107705/python-output-buffering – synthesizerpatel
@synthesizerpatel: ну, urlopen() возвращает объект с файловым интерфейсом, но это не файл. – vartec