2017-05-13 168 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) 

,但如果你用空閒運行程序,然後它不會工作!