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-C我得到了这个输出:

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

所以每个点都出现中断之后。这是为什么 ?我怎样才能达到预期的结果?我尝试了与print语句相同的结果。在 OS X 和 linux 上也是如此。

4

2 回答 2

3

你没有刷新缓冲区,所以输出实际上并没有发生;它存储在不确定的某个地方。

中断后,缓冲区将被刷新。

有关更多信息,请参阅这些链接:

禁用输出缓冲

如何刷新 Python 打印的输出?

另外,从评论中引用mgilson:

此代码将花费大部分时间在 time.sleep 中。在该时间间隔内,KeyboardInterrupt 不会被捕获。

于 2013-05-16T23:05:55.373 回答
0

您是否尝试使用 print 而不是 sys.stdout.write?

print '.'
于 2013-05-16T23:07:20.517 回答