在python中使用print刷新stdout行时出现问题

2024-10-03 04:26:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试使用以下代码打印python2.7中for循环的进度:

for i in range(100):
    if float(i) % 10.0 == 0:
        print i, "\r",

我所追求的行为是在std-out上刷新同一行,而不是每次都写一行新的行。在

编辑1:

在我的控制台(Xfce终端0.4.8)中进行测试时,实际上无论是否包含if语句,我都没有得到任何输出。在

为什么没有输出?

我最初说stdout的行为取决于if语句是否存在,因为我将产生问题的代码简化为最简单的形式(只为了产生上述效果)。我很抱歉。在

编辑2:

多亏了senderle,这个问题就解决了。如果您错过了sleep()命令,那么打印和回车会很快发生,您看不到它们。在

编辑3:

最后一件事。如果您没有捕捉到range(100)中的最后一个数字,即99,那么这个数字将从屏幕上清除。在

编辑4:

注意senderle答案中print i后的逗号。在


Tags: 代码in终端编辑forifrange数字
2条回答

我发现使用sys.stdout是一种更独立于系统的方式来实现这一点,原因与print的工作方式有关。但是您必须显式地flush缓冲区,所以我把它放在一个函数中。在

def carriage_return():
    sys.stdout.write('\r')
    sys.stdout.flush()

这算是一个玩笑。如果有帮助请告诉我。在

我试过了,对我有用。这个time.sleep只是为了戏剧化。在

^{pr2}$

最后,我看到人们也这样做。使用这样的终端控制代码在某些方面似乎是正确的,但对我来说,它似乎更脆弱。对于我来说,上面的代码同样适用(在OSX上)。在

def carriage_return():
    if sys.platform.lower().startswith('win'):
        print '\r'
    else:
        print chr(27) + '[A'

按原样测试代码,并在第一行末尾包含一个:冒号:,对于32位的Py2.7和64位的Windows7,都能正常工作。在

在您的iffor块中是否有可能导致新行被写出的输出写入?在

相关问题 更多 >