<p>我试图写一个简单的工具,从光盘读取文件,做一些图像处理,并返回算法的结果。由于程序有时可能需要一段时间,我喜欢有一个进度条,以便我知道它在程序中的位置。由于我不喜欢把命令行弄得乱七八糟,而且我是在Unix平台上,所以我想使用'\r'字符只在一行上打印进度条。</p>
<p>但当我有这个密码的时候,它什么也印不出来。</p>
<pre><code>
# Files is a list with the filenames
for i, f in enumerate(files):
print '\r%d / %d' % (i, len(files)),
# Code that takes a long time
</code></pre>
<p>我也试过:</p>
<pre><code>
print '\r', i, '/', len(files),
</code></pre>
<p>为了确保这在python中有效,我尝试了:</p>
<pre><code>
heartbeat = 1
while True:
print '\rHello, world', heartbeat,
heartbeat += 1
</code></pre>
<p>这个代码工作得很好。发生什么事?我对Linux上回车的理解是,只要不在任何地方打印换行符,它只会将换行符移动到开头,然后我就可以覆盖以前编写的旧文本。但这似乎没有发生。</p>
<p>还有,在命令行中显示进度条的方法是否比我当前尝试的更好?</p>