2013-05-16 72 views
0
import urllib2 
import webbrowser 
import time 
import sys 

URL = "http://nonexisting" 

while True: 
    try: 
     website = urllib2.urlopen(URL, timeout=1) 

     if website: 
      webbrowser.open_new(URL) 
      break 

    except KeyboardInterrupt: 
     break 

    except: 
     sys.stdout.write('.') 
     time.sleep(1) 

我希望這個代碼寫出來點每秒,而是什麼也沒發生,當我按CTRL- ç我得到這樣的輸出:沒有在Python標準輸出出現...除了:塊

^C..........Traceback (most recent call last): 
    File "stackoverflow_question.py", line 21, in <module> 
    time.sleep(1) 
KeyboardInterrupt 

所以每個點中斷後出現。這是爲什麼 ?我怎樣才能達到預期的結果? 我用print語句嘗試了相同的結果。在OS X和Linux上也是如此。

回答

3

您沒有刷新緩衝區,所以輸出沒有真正發生;它存儲在某個地方。

中斷後,緩衝區被刷新。

請參閱以下鏈接瞭解更多信息:

Disable output buffering

How to flush output of Python print?

而且,引自mgilson從註釋:

這個代碼將花大部分的時間在時間。睡覺。在此期間,KeyboardInterrupt不會被捕獲。

+2

此外,這段代碼將花費大部分時間在'time.sleep'中。在那段時間內,'KeyboardInterrupt'不會被捕獲。 – mgilson

+0

確實!但是程序無論如何都是中斷的:D那麼我怎樣才能抓住它並妥善處理呢? – kissgyorgy

+1

@Walkman:將這一刻帶入嘗試。要獲得更完整的答案,請提出一個新問題。 – SingleNegationElimination

0

你有沒有嘗試使用打印是sys.stdout.write?

print '.' 
+0

如果您沒有閱讀該問題,請不要回答... – kissgyorgy

相關問題