使用不在Linux上运行的\r重写Python中的上一行

2024-04-20 09:50:47 发布

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

我正在尝试打印出覆盖控制台输出同一行上的先前更新的状态更新(例如,我的程序所在的行号)。大多数堆栈溢出对此建议使用'\r'。以下代码在我的Windows计算机上运行得很好:

import time
for i in range(10):
    print str(i) + '\r' ,
    time.sleep(1)

但是当我把它移到Google计算引擎机器(debiangnu/linux7.8(wheezy))时,同样的代码没有显示任何输出。有什么想法为什么?在


Tags: 代码inimport程序fortime堆栈windows
1条回答
网友
1楼 · 发布于 2024-04-20 09:50:47

这可能是缓冲问题的讨论。在

缓冲区冲洗的工作方式不同,具体取决于所连接的文件或管道的类型。这是为了支持及时向人显示他需要查看的内容,同时仍然可以通过在适当的地方批量处理文件操作来更有效地处理文件操作。但有时算法会出错;幸运的是,当发生这种情况时,有工具可以手动刷新:

from sys import stdout

import time
for i in range(10):
    print str(i) + '\r' ,
    stdout.flush()
    time.sleep(1)

顺便说一句,我个人觉得当光标位于字符串顶部时会很烦人,所以如果我这样做,我通常会从一个空格开始:

^{pr2}$

或者,由于您需要导入sys并使stdout可用,所以您可以省去打印后有趣的逗号,只需执行以下操作:

^{3}$

有关stdin、stdout和stderr缓冲的更多信息,请参阅此处:

Is stdout line buffered, unbuffered or indeterminate by default?

请注意,stderr通常不是缓冲的,所以通常不会有这个问题。将状态信息定向到stderr,将实际输出定向到stdout是一个很好的方法,对于简单的程序来说,您可以查看屏幕上的所有内容,也可以将stdout重定向到一个文件或管道以供以后处理,并且在程序执行期间仍能看到状态信息。在

相关问题 更多 >