2010-10-08 142 views
1

我有客戶端的Web界面長期運行的過程。我希望顯示該進程的輸出。與urllib.urlopen()效果很好,但它沒有timeout參數。另一方面,urllib2.urlopen()輸出被緩衝。有沒有簡單的方法來禁用該緩衝區?無緩衝urllib2.urlopen

+0

非常類似的問題在http://stackoverflow.com/questions/107705/python-output-buffering – synthesizerpatel 2010-10-08 08:40:30

+1

@synthesizerpatel:好吧,urlopen()返回與文件類接口的對象,但它不是一個文件。 – vartec 2010-10-08 08:51:10

回答

0

發生在我身上的一個快速入侵是使用urllib.urlopen()threading.Timer()來模擬超時。但這只是快速和骯髒的黑客攻擊。當你只需要調用read()

可以定義一個大小閱讀,從而禁用緩衝

0

urllib2緩衝。

例如:

import urllib2 

CHUNKSIZE = 80 

r = urllib2.urlopen('http://www.python.org') 
while True: 
    chunk = r.read(CHUNKSIZE) 
    if not chunk: 
     break 
    print(chunk) 

這將打印響應每個塊從插座讀取之後,直到接收到整個響應被緩存。