首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python中覆盖之前的打印到stdout?

如何在python中覆盖之前的打印到stdout?
EN

Stack Overflow用户
提问于 2011-03-24 20:50:06
回答 14查看 205.4K关注 0票数 146

如果我有以下代码:

for x in range(10):
     print x

我会得到下面的输出

1
2
etc..

我想要做的不是打印换行符,而是替换以前的值,并用同一行上的新值覆盖它。

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2011-03-24 20:56:11

简单版本

一种方法是使用回车符('\r')返回到行首,而不前进到下一行。

Python 3

for x in range(10):
    print(x, end='\r')
print()

Python 2.7向前兼容

from __future__ import print_function
for x in range(10):
    print(x, end='\r')
print()

Python 2.7

for x in range(10):
    print '{}\r'.format(x),
print

Python 2.0-2.6

for x in range(10):
    print '{0}\r'.format(x),
print

在后两种情况(仅适用于Python 2)中,print语句末尾的逗号告诉它不要转到下一行。最后一条print语句前进到下一行,这样提示符就不会覆盖最终输出。

线路清洗

如果您不能保证新文本行不比现有行短,那么您只需要添加一个“清除到行尾”转义序列'\x1b[1K' ('\x1b' = ESC):

for x in range(75):
    print('*' * (75 - x), x, end='\x1b[1K\r')
print()
票数 168
EN

Stack Overflow用户

发布于 2014-02-18 05:56:47

由于我是通过Google来到这里的,但我使用的是Python3,下面是Python3的工作原理:

for x in range(10):
    print("Progress {:2.1%}".format(x / 10), end="\r")

相关答案:How can I suppress the newline after a print statement?

票数 112
EN

Stack Overflow用户

发布于 2014-08-03 21:27:15

@Mike DeSimone answer可能会在大部分时间内工作。但是..。

for x in ['abc', 1]:
    print '{}\r'.format(x),

-> 1bc

这是因为'\r'只返回到行的开头,而不清除输出。

编辑:更好的解决方案(比我下面的旧方案更好)

如果POSIX支持对您来说足够了,下面的命令将清除当前行,并将光标留在其开头:

print '\x1b[2K\r',

它使用ANSI转义代码来清除终端行。更多信息可以在in wikipediathis great talk中找到。

老答案

我找到的(不太好的)解决方案是这样的:

last_x = ''
for x in ['abc', 1]:
    print ' ' * len(str(last_x)) + '\r',
    print '{}\r'.format(x),
    last_x = x

-> 1

它的一个优点是它也可以在windows上工作。

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5419389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档