我有一个长时间运行的脚本,可以循环数据库中的行。我经常希望它打印已处理的行数,但不需要每次都创建新行。这基本上就是我所拥有的:
import sys
mystr = "{} rows complete\r"
for i in range(0, 100):
if i % 10 == 0:
sys.stdout.write(mystr.format(i))
sys.stdout.flush()
当我运行这个(在 Python 2.7.5 64 位,Windows 上)时,我得到:
0 rows complete
10 rows complete
20 rows complete
...
100 rows complete
谁能想到为什么回车不起作用?我在这里看到了一些关于Python的类似问题\r
,但所有答案都说要包括sys.stdout.flush()
,我有。
Using \r
可能是正确的方法,但行为很大程度上取决于文本的输出方式。并非所有终端都会遵循裸回车符:
cmd.exe
and powershell.exe
都应该按照您期望的方式输出文本(Powershell ISE 不会,但这是一个转移注意力的事情)。
Python自己的idle
将忽略回车符,所有输出都在一长行上。
正如您所指出的,您自己的编辑器的命令窗口也会忽略\r
.
另外,如果您从交互式窗口尝试,您还会在每行末尾得到一些数字输出:这是因为交互式窗口有助于输出调用的结果sys.stdout.flush()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)