2014-10-26 323 views
2

我有一個長時間運行的腳本,循環遍歷數據庫中的行。我經常想要打印它處理的行數,但不會每次都創建一個新行。實際上,這就是我:Python回車不起作用

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 

誰能想到,爲什麼回車ISN」的工作?我在這裏看到了一些關於Python和\r的類似問題,但是所有的答案都表示包含sys.stdout.flush(),這是我的。

+0

這是在Windows上執行嗎? – 2014-10-26 16:11:45

+0

是的,它在Windows上。 – Rob 2014-10-26 16:16:27

+0

適用於Python 2.7.7和3.3(儘管調用'time.sleep()'有助於查看更早的行,區別在於我運行的是32位版本或0.0.2版本差異,或者可能是你如何運行它:你如何運行腳本?我嘗試了兩個從PowerShell和從cmd.exe,它適用於我的任何方式 – Duncan 2014-10-26 16:47:16

回答

5

使用\r可能是正確的方法,但行爲很大程度上取決於文本的輸出方式。不是所有的終端都會遵循一個單獨的回車:

cmd.exepowershell.exe應該都按照您期望的方式輸出文本(Powershell ISE不會,但這裏是一個紅鯡魚)。

Python自己的idle將忽略回車,所有輸出都在一條長線上。

如您所述,您自己的編輯器的命令窗口也會忽略\r

另外,如果您從交互式窗口中嘗試,您還可以在每行的末尾獲得一些數字輸出:這是因爲交互式窗口可以將呼叫的結果有用地輸出到sys.stdout.flush()