2011-05-25 86 views
2

當我寫一個腳本,更新的印刷線路,例如是這樣的:打印 r正確

for i in range(101): 
    print(str(i) + "% \r", end="") 

以及使用該終端(Ubuntu的)時,得到正確的輸出,即運行該腳本更新行:

100% 

然而,在使用Eclipse Pydev的,Eclipse控制檯做到這一點:

0% 
1% 
2% 
... 
100% 

任何人都知道如何解決這個問題?提前致謝!

回答

0

這似乎是舊的CR LF問題。根據您使用的操作系統和控制檯,CR和LF作爲線路終端將被解釋爲不同。

某些系統需要CRLF作爲行尾。有些系統只需要LF,但隱含地執行CR。 有些系統(比如你的)在每個CR之前隱式地做一個LF,儘管這是我第一次看到這個。

也許有一種方法可以編輯PyDev控制檯的換行設置。

編輯:或者你可以使用ANSI轉義代碼來移動光標。像CSInD一樣,n個字符在左邊,或者CSInC在n個字符的右邊。

+0

在我看來,太像CR LF問題,雖然這是奇怪的。正如你所說,一些系統只需要LF,但隱含地執行CR。我在這裏看到的雖然是LF隱式完成,恕我直言,這是錯誤的,我也從來沒有見過。無論如何 - 我正在尋找這種方式來編輯我的控制檯的新行設置,但似乎無法找到任何。也許我是盲人,但我恐怕他們不存在:( – Zymox 2011-05-25 15:50:02

+0

真的很奇怪的行爲。但與ANSI esc代碼,你應該在任何地方的安全。 – Hyperboreus 2011-05-25 15:53:17

+0

只是嘗試ANSI代碼,那裏的同一故事......作品如果在終端中運行,但在Eclipse中的控制檯只是打印一個代碼塊。似乎是一個普遍的問題,我開始懷疑有一個修復=/ – Zymox 2011-05-25 18:12:01

3

這是因爲「打印」總是產生每當你使用\ R或不是一個新的生產線,嘗試sys.stdout的替代:

import time, sys 

for i in range(101): 
    sys.stdout.write(str(i) + "% \r") 
    sys.stdout.flush() 
    time.sleep(.3) 
+0

不會更改Eclipse 4.6.3的PyDev控制檯的打印行爲Python 3.5.2 – MrT 2017-12-05 10:47:14