我无法理解的Python打印行为

时间:2011-03-05 11:09:54

标签: python printing

我的代码段如下所示:

from time import sleep
for i in xrange(10):
    status = "hello%s" % str(i)
    status = status + chr(8)*(len(status)+1)
    sleep(1)
    print status

的行为不同
print status

print status,

现在当我在print status之后使用逗号时,print只输出一次stdout。也就是说,在循环迭代最后一次之后,当我在print status之后没有放入逗号时,每次调用它时print输出到stdout(正如我所期望的那样)。

我不明白下面发生了什么。谁能解释一下。谢谢:))

3 个答案:

答案 0 :(得分:5)

控制台终端是行缓冲的,这意味着当控制台缓冲区找到一个换行符时会刷新控制缓冲区\ n,这解释了你现在看到的行为,因为当你执行print status打印时会打印出来自动创建一个新的行字符,它将在打印后刷新控制台缓冲区,但是当您执行print status,时,打印将不会添加新行,因此打印后不会刷新缓冲区。

这是关于缓冲希望的good article,它可以为您提供更多见解:)

答案 1 :(得分:2)

即使使用逗号也能正常工作,但没有换行符: http://codepad.org/iXK0o8Cu

这是按照这里所说的每个行为: http://www.ferg.org/projects/python_gotchas.html#contents_item_4

逗号在打印后删除换行符

答案 2 :(得分:1)

它是缓冲的东西。就像在C中一样,如果你打印一些东西到标准输出,然后你关闭它,你必须调用fflush()来清除缓冲区输出。如果你在开头和打印后导入sys,你调用“sys.stdout.flush()”,它就可以了。