2017-05-13 132 views
1

我想弄清楚如何做一些看起来很简单的事情,但还没有做到这一点。动态地打印一些东西来代替旧的打印的东西等

基本上,我只是想在同一行上打印一些东西,以便这个新的印刷物替换旧的印刷物。

让我们这块示例的代码:

import time 

for i in range (0, 20): 
    print(i) 
    time.sleep(0.3) 

我想要的第二输出端(“2”),以取代第一个(“1”),则第三输出(“3”)取代第二个,等等。

我在互联网上看到了一些旧的答案,说有“flush”参数,我可以添加我的打印语句。所以我尝试过:

import time 

for i in range (0, 20): 
    print(i, flush=True) 
    time.sleep(0.3) 

确实没有改变任何东西。

  • 我在Mac OS X如果意味着什么 -

感谢所有帮助

回答

2

使用stdout

from sys import stdout 
from time import sleep 

for i in range(10): 
    stdout.write("\r%d" % i) 
    stdout.flush() 
    sleep(1) 

更新

for i in range(10): 
    print("\r%d" % i, end="") 
    time.sleep(0.3) 
+0

刚刚尝试过。不起作用。我在Mac OS btw上。 – Michael

+0

你确定吗?我只在Mac上测试过。 – itzMEonTV

+0

是的。我从字面上复制/粘贴你的代码。 – Michael

-1

假设您使用python 3,请使用'\r'转到行首和end=""以保持同一行。他们结合起来,可以提供您所需要的效果。

例如:

import time 

print("\r[]", end="") 
time.sleep(1) 
print("\r []", end="") 
time.sleep(1) 
print("\r []", end="") 
time.sleep(1) 
print("\r  []", end="") 
time.sleep(1) 
print("\r  []", end="") 
+0

不起作用。复制粘贴你的代码 – Michael

+0

@Michael试试这个,我只是在我的机器上测试过它,它工作。 –

1

如果您正在使用的终端来运行该程序,然后:

for i in range(10): 
    stdout.write("\r%d" % i) 
    stdout.flush() 
    sleep(1) 

,但如果你用空闲运行程序,然后它不会工作!