實現控制台進度條

2021-09-01 17:47:59 字數 1199 閱讀 2729

此類功能在linux的控制台軟體中是很常見的,windows下沒有什麼印象。

因為wget是c語言在linux上實現的,我首先考慮到的是不是有相關介面,於是就找來那本名著《uinx環境程式設計》,查閱後並未發現相關api。有同事認為stdout也是檔案,應該看看檔案io章。於是就仔細學習了那章,複習和鞏固了一下知識,雖然看似可以解決這個問題,但感覺操作過於繁瑣。

因為進度條的輸出在stdout,所以我認為是應該理解一下stdout的處理機制。在學習stdout相關資料時,我發現了 「\r」 這個轉義符,代表「回車」。順藤摸瓜,開始區分一下「回車」和」換行」。以下自回車與換行

在計算機還沒有出現之前,有一種叫做電傳打字機(teletype model 33)的玩意,每秒鐘可以打10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。要是在這0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。

於是,研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字元。乙個叫做"回車",告訴打字機把列印頭定位在左邊界;另乙個叫做"換行",告訴打字機把紙向下移一行。 這就是"換行"和"回車"的來歷,從它們的英語名字上也可以看出一二。

後來,計算機發明了,這兩個概念也就被般到了計算機上。那時,儲存器很貴,一些科學家認為在每行結尾加兩個字元太浪費了,加乙個就可以。於是,就出現了分歧。

unix系統裡,每行結尾只有"《換行》",即"\n";windows系統裡面,每行結尾是"《回車》《換行》",即"\r\n";mac系統裡,每行結尾是"《回車》"。

回車與換行

然後了解到\r會將游標移動到行首,那麼只要不進行換行就可以實現在該行重新整理輸出,進而實現進度條效果了。回憶一下c後,終於可以實現:

#include 

intmain

()printf("

\n");}

當然,既然原理**清楚了,那麼ruby實現亦然:

(1.

.100).

eachdo|

x|printf"\r

%s",x.

to_s

+'%'

+'='*x

+'>'

sleep

1end

puts

Python 控制台進度條的實現

進行爬蟲等耗時的任務時,有時會想在控制台輸出進度條,以顯示當前任務進度。這裡總結了兩種方法。方法1 使用tqdm模組 示例 from time import sleep from tqdm import tqdm for i in tqdm range 1000 sleep 0.005 顯示效果 方...

c 控制台進度條類

console.writeline now show consolepare c new consolepare 100mb for int i 0 i 100 i i 3 console.writeline console.writeline ok console.read class conso...

golang控制台顯示進度條

x 總量 x 當前進度 x 耗時 通過以上元素可以延伸出 完成百分比 速度 預計剩餘時間 根據設定速度快慢閾值用不同的顏色來顯示進度條。進度條 type bar struct 耗時 乙個計時器,需要注意的是即使進度沒有變化,耗時也是遞增的,看過乙個多程序進度條的寫法,沒有注意這塊,乙個gorouti...