我的代码段如下所示:
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(正如我所期望的那样)。
我不明白下面发生了什么。谁能解释一下。谢谢:))
答案 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()”,它就可以了。