2010-10-08 2 views
1

У меня есть клиент для веб-интерфейса для долгого процесса. Я хотел бы получить вывод из этого процесса, который будет отображаться по мере его появления. Отлично работает с urllib.urlopen(), но он не имеет параметра timeout. С другой стороны, с urllib2.urlopen() выход буферизуется. Есть ли простой способ отключить этот буфер?unbuffered urllib2.urlopen

+0

Очень похожий вопрос на http://stackoverflow.com/questions/107705/python-output-buffering – synthesizerpatel

+1

@synthesizerpatel: ну, urlopen() возвращает объект с файловым интерфейсом, но это не файл. – vartec

ответ

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) 

это было бы напечатать ответ после того, как каждый фрагмент считывается из розетки, а не буфером, пока весь ответ не получен.

 Смежные вопросы

  • Нет связанных вопросов^_^