2012-06-13 30 views
12

我需要在一個循環(Python 3.x)中打印一行。環視已經,我把這條線在我的代碼:python:打印使用回車符和逗號不工作

print('{0} imported\r'.format(tot),) 

但是,它仍然打印時通過循環多行。我也曾嘗試

sys.stdout.write('{0} imported\r'.format(tot)) 

但這並不打印什麼到控制檯...

任何人都知道這是怎麼回事這個?

+0

'sys.stdout.write函數()'爲我工作..你有'進口sys'。你是否試圖在同一行覆蓋輸出? – Levon

+0

如果您想從python 2.x中獲得與'print text'相同的效果,您需要使用'end'參數,如'print(text,end ='')'中所示。函數參數末尾的逗號不起作用。 – James

+0

不確定「來自2.x」。 'print(text,end ='')'行在'='處給我一個語法錯誤。 – rossmcm

回答

17

在第一種情況下,某些系統會將\r視爲換行符。在第二種情況下,您沒有flush該行。試試這個:

sys.stdout.write('{0} imported\r'.format(tot)) 
sys.stdout.flush() 

法拉盛線路並非所有的系統所需的任一,如列翁提醒我 - 但它使用\r這樣,當通常是一個好主意。

+0

@ kevlar1818正如我在評論中提到的那樣,這對我很有用(甚至不會沖洗輸出緩衝區)...... odd – Levon

+0

'sys.stdout.flush()'是我所需要的。謝謝! – kevlar1818

9

如果你想覆蓋最後一行,你需要添加\ r(字符返回)和end =「」,這樣你就不會去下一行。

values = range(0, 100) 
for i in values: 
    print ("\rComplete: ", i, "%", end="") 
print ("\rComplete: 100%") 
3

我更喜歡使用揚的解決方案,但以這樣的方式

values = range(0, 101) 
for i in values: 
    print ("Complete: ", i, "%", end="\r") 
print ("\n\r", end="") 
+3

你的最後一行是矯枉過正。它應該只是'print()'。 –