Skip to main content
 首页 » 编程设计

python之使用 python 打打印新 stdout 行时出现问题

2025年05月04日10yyy_WW

我一直在尝试使用以下代码在 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 后面的逗号的答案。

请您参考如下方法:

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

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

这是一种 WAG。让我知道是否有帮助。

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

import sys, time 
 
def carriage_return(): 
    sys.stdout.write('\r') 
    sys.stdout.flush() 
 
for i in range(100): 
    if i % 10 == 0: 
        print i, 
        carriage_return() 
        time.sleep(1) 

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

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